u++の備忘録

regonn&curry.fm にゲスト参加しました

少し日は経ってしまいましたが、データサイエンス・機械学習(主にKaggle)について話すPodCast「regonn&curry.fm」にゲスト参加しました。先日発行した拙著*1などについて、共著者のカレーさんも含めてざっくばらんにお話しています。

ご興味あれば、ぜひお聴きください。

anchor.fm

f:id:upura:20200327230635p:plain

「企業分析における自然言語処理を学ぼう」にオンライン参加した #carenlp

「企業分析における自然言語処理を学ぼう」と題した勉強会*1に参加しました。初めての大規模なオンライン勉強会への参加でしたが、画質も全く問題なくChatやtwitterハッシュタグでコミュニケーションが取れて「これはこれで良いな」という感想を抱きました。発表終了時に、拍手の意で「8888888」のコメントが流れるのは往年のニコニコ動画を思い出しました。

以下、発表メモを共有します。

発表1: 「財務・非財務一体型の企業分析に向けて」by @icoxfog417

  • TISで企業分析に取り組む@icoxfog417さんの発表
    • TISが公開したデータセットを用いた、Nishikaというプラットフォームで「財務・非財務情報を活用した株主価値予測」コンペ*2も開催中
  • 企業分析の中で、非財務情報の活用は進んでいるとは言いづらい
    • 理由はザックリと言うと「数値化されていないから」
  • 検証可能な数値を作るために、次の2種のアプローチが存在
    • 資産評価:企業が実際に持っている資産の評価を精緻化する
    • 運用評価:資産がどれだけ売上に繋がるかを評価する
  • 資産評価の出発点として、無形資産の内訳の取得分析を実施
  • 発表の最後の以下のメッセージが印象的だった
    • 適正評価は市場全体の安定に寄与する
    • 適正な企業評価には非財務観点の分析が必要不可欠

発表2-1: 「Form 10-Kの外観と分析の下ごしらえ」 by @gepuro

blog.gepuro.net

  • ユーザベースグループのサービスで、アカウントベースドマーケティング(ABM)に特化した「FORCAS」の@gepuroさんの発表
  • FORCASは2019年7月から米国展開
  • 米国には「Form 10-K」という企業財務情報の公開レポートが存在しており、業務の中で分析に取り組んでいる
    • 「ネ申エクセル」ならぬ「ネ申HTML形式」で、企業によってフォーマットが異なるデータセット
  • 正規表現を駆使して分析の下ごしらえのためのデータパースに尽力した

発表2-2: 「企業データ分析における教師データ集めと能動学習」 by @takeshi_osoekawa

  • ユーザベースグループのサービスで「SPEEDA」のデータサイエンティストとして働く@takeshi_osoekawaさんの発表
  • 機械学習の使い所は「要素と要素を結ぶ」
    • 例:企業→業界の紐付け
    • X: 600万社くらいの企業概要、y: 業界560 に多クラス分離問題
  • 教師データの準備が課題
    • 専門知識が必要
    • 利用規約の問題で外注の制約も存在
    • 紐付けの需要は大きいので、内製化で解決の糸口を探っている
  • さまざまな技術を併用して対処
  • 実務で能動学習を試した中で得られた知見
    • 精度を測るデータセットが別途必要
    • 既存の正例に引っ張られるのでRecall上げにくい

発表3: 「私と金融テキストマイニング」 by @Hiroki Sakaji

  • 東大の工学系研究科で特任講師を務める@Hiroki Sakajiさん*3の発表
  • 金融テキストマイニングに取り組む理由と、研究事例の紹介
    • ご自身の経歴に沿いながら、研究概要を分かりやすく端的に解説
    • 大学の先生の発表が一番はっちゃけていてギャップに驚いた
  • 景気動向を示す根拠表現の抽出と極性付与
  • 坂地泰紀, 酒井浩之, 増山繁, 決算短信PDFからの原因・結果表現の抽出, 電子情報通信学会論文誌D, Vol.J98-D, No.5, pp.811-822, 2015.
  • Hiroki Sakaji, Satoshi Sekine, Shigeru Masuyama, Extracting Causal Knowledge Using Clue Phrases and Syntactic Patterns, 7th International Conference on Practical Aspects of Knowledge Management (PAKM), pp.111-122, Yokohama, Japan, 2008.
  • インパクトのあるプレスリリースの抽出
  • 新聞記事からの因果関係の抽出*4
  • 決算短信PDFからの因果関係の抽出*5
  • 経済因果チェーン*6
  • システム*7も公開中
  • 接触履歴を用いた地方景況感と業種間構造の分析*8
  • テキスト情報も駆使して日本経済の可視化に取り組みたいとのこと

「AutoGluon-Tabular」を試してみる

AutoML「AutoGluon-Tabular」が、少なくとも私の観測範囲の中で局所的に話題になっています。

本記事では、この「AutoGluon-Tabular」を取りあえず恒例のTitanicで試してみました。なおコードの全体像はKaggleのNotebook*1にて公開しています。

インストール

公式ページ*2の指示に従います。

!pip install --upgrade mxnet
!pip install autogluon

学習・予測

あとはREADME*3の指示に従い、直接学習・予測が実行できます。TitanicのデータセットにはNameなど文字列型のカラムも存在している中で、前処理などもせずファイルパスを指定するだけです。

from autogluon import TabularPrediction as task


train_data = task.Dataset(file_path='../input/titanic/train.csv')
test_data = task.Dataset(file_path='../input/titanic/test.csv')
predictor = task.fit(train_data=train_data, label='Survived')
y_pred = predictor.predict(test_data)

Titanicでスコア議論するのは野暮ですが、0.77990とそこそこな値が出ています。

おわりに

本記事では、AutoML「AutoGluon-Tabular」を紹介しました。前処理不要でファイルパスを渡すだけで学習・予測が完了するのは非常に便利だなと感じました。

【論文メモ】「第24回 人工知能学会 金融情報学研究会」で気になった発表

「第24回 人工知能学会 金融情報学研究会(SIG-FIN)」*1で気になった発表をいくつか読みました。

昨年10月の第23回が台風接近の影響で中止*2となり、今回も新型コロナウイルスの影響で中止*3となってしまいました。今回は「発表扱い」で原稿も公表されたので、気になった発表をいくつかまとめてみました。

金融✕人工知能とした日本語の研究会で、読みやすい内容が多いと思います。ぜひザッとタイトルだけでも眺めてみてください。

日銀「主な意見」の発言者分類モデルの作成と政策変更予測への応用

github.com

ニュース記事に基づく景気指標S-APIRの開発

github.com

会社四季報を用いた理論株価の推定 : Kaggleを参考に

github.com

ニュース重要単語の機械学習によるアクティブ運用

github.com

ニューステキストを用いたESGファクター運用

github.com

グラフエンベディングを活用した潜在取引関係予測

github.com

B2B市場における企業ブランドとROEの関連性

github.com

GCNによる取引関係グラフからの企業の特徴量抽出

github.com

テキストマイニングを利用したテーマに関連する上場企業検索ツールの開発

github.com

文脈を考慮した決算短信からの業績要因抽出

github.com

【書籍メモ】『PythonではじめるKaggleスタートブック』(講談社)

共著で執筆した、3月17日発売の『PythonではじめるKaggleスタートブック』(講談社)が手元に届きました。

f:id:upura:20200314023353p:plain

本記事では、本書の関連リンクをまとめました。以前に書いた告知記事については、補足情報も付与します。

Amazon

www.amazon.co.jp

サンプルコード

github.com

告知記事

upura.hatenablog.com

告知記事の補足

1. 私がレビューをお願いした方々のご紹介

告知記事のタイミングではレビューが完了していなかったため積極的に公表していませんでしたが、私が優勝したKaggle「PetFinder.my Adoption Prediction」コンペ*1のチームメイト4人に、本書のレビューにご協力いただきました。Kaggle GrandmasterやKaggle Masterの称号を持っている方々に深く議論に参加していただき、より良い書籍に仕上げられたことを大変嬉しく思っています。

2. サンプルコードの公開

本書のサンプルコードはGitHubで公開するだけではなく、同様のファイルをKaggleのNotebookとしてもアップロードしています。KaggleのNotebooks環境は初学者にとって非常に便利で、KaggleのUI/UXに慣れてもらう狙いもあります。

3. 2020年2月のKaggleの大規模UI/UX変更に対応

KaggleのUI/UXは、2020年2月中旬に大規模に変更されました。本書では、上述したKaggleのNotebooks環境の使い方の説明部分など、新デザインに対応した説明を付与しています。

4. 電子版について

時期は現時点では不明ですが、紙版の発行後に電子版も発売開始になるそうです。kindle版やkobo版などリフロー型*2を提供予定とのことです。

おわりに

本記事では、3月17日発売の『PythonではじめるKaggleスタートブック』の関連リンクをまとめ、告知記事の補足情報も掲載しました。本書の執筆に当たっては、前提となったKaggleの経験・知識も含めて、本当に数多くの方々にお世話になりました。お礼申し上げます。本書を通じてそれらの知見が少しでもコミュニティに還元できれば嬉しい限りです。

AtCoder「日立製作所 社会システム事業部 プログラミングコンテスト2020」をPythonで解く

久しぶりにAtCoderのコンテストに参加しました。A, B問題の2完でした。

f:id:upura:20200308214354p:plain

atcoder.jp

A - Hitachi String(100点)

  • 「Sの長さは1以上10以下」なので、hitachi文字列は高々5通りです
S = input()
hitachi = [
    'hi',
    'hihi',
    'hihihi',
    'hihihihi',
    'hihihihihi',
]
if S in hitachi:
    print('Yes')
else:
    print('No')

B - Nice Shopping(200点)

  • 割引券を使った場合 + (割引券を1枚使った場合) * M の全M+1通りを試して、最小値が答え
A, B, M = list(map(int, input().split()))
a = list(map(int, input().split()))
b = list(map(int, input().split()))
X = [list(map(int, input().split())) for i in range(M)]

ans = [min(a) + min(b)]
for x in X:
    a_idx, b_index, c = x
    ans.append(a[a_idx - 1] + b[b_index - 1] - c)

print(min(ans))

「無観客試合」となる「R-1ぐらんぷり2020」に関する仮説と可視化

今夜のピン芸人ナンバーワン決定戦「R-1ぐらんぷり」は、流行する新型コロナウイルスの影響を受け、史上初めて無観客で開催されます*1

この異例の事態を受けて、自分の中で「会場のウケ量が分かりづらく審査員が判断に困るのでは」という仮説が浮かびました。本記事では、この仮説の検証に役立ちそうな2つの可視化を実施します。

前提:R-1ぐらんぷりの審査方式

R-1ぐらんぷりの審査方式は、2012年大会以降、次の方式となっています。

決勝出場者12人によるブロックトーナメント。3つあるブロックごとに4人が出場する。各審査員は持ち点3点をその面白さに応じて4名に振り分け、最多得点の1名が勝者。各ブロックの勝者計3人がファイナルステージに進出。改めてネタを披露し、審査員の指名投票により優勝者を決定する。人数の増加に伴い、ネタ時間は3分に変更。

R-1ぐらんぷり - Wikipedia

可視化1:「各審査員は、偏った投票がしづらくなるのでは?」

会場のウケ量が分かりづらくなることで、今年は「1人に3票」が減って、無難な「2票・1票」「1票・1票・1票」が増えると予想しています。

3票の振り分け方は3種類あり、2019年までの傾向は次の通りでした。「2票・1票」が圧倒的に多く、ついで「1人に3票」、「1票・1票・1票」はほとんどありません。

f:id:upura:20200308151258p:plain

審査員別に見ると、次の通りです。比較的「攻めた」審査をしている方など、傾向が見て取れます。

f:id:upura:20200308151420p:plain

可視化2:「ブロック単位でも投票の偏りが減るのでは?」

審査員単位ではなくブロック単位で見た場合も「今年は圧勝が減って票のバラツキが大きくなるんじゃないか」と予想しています。

過去の結果について、バラツキの指標と言える「ジニ係数」を算出して可視化しました。 ※ お茶の間dポイントは除外

f:id:upura:20200308151624p:plain

ジニ係数は分配の不平等さを測る指標で、たとえば4人への投票の振り分けが「13票・2票・0票・0票」のときに大きく、「4票・4票・4票・3票」のときに小さくなります。

おわりに

本記事では、史上初の「無観客試合」となる「R-1ぐらんぷり2020」について「会場のウケ量が分かりづらく審査員が判断に困るのでは」という仮説を述べ、2種類の可視化を実施しました。結果がどうなるかは、今夜のお楽しみです。

ソースコードはNotebook形式で公開しています*2