u++の備忘録

markdownからサクッと発表資料を作る「Marp」

本記事では、markdownからサクッと発表資料を作れる「Marp」を紹介します。込み入った配置や図形挿入などはできませんが、箇条書きメモを書き出してたら発表資料になっている感じで重宝しています。

Marp?

https://yhatt.github.io/marp/

How?

  1. Install Marp for VS Code.
  2. Create presentations.md.
  3. Ctrl+Shift+P and Marp: Export slide deck....

Source code

github.com

Slide

イベント参加者用の名札をPythonで自動生成

先日開催した「Sports Analyst Meetup #6」*1では、イベント参加者の方々全員に名札を配布する試みを実施しました。

f:id:upura:20200209162722p:plain

この名札はconnpassの情報を基に、Pythonで自動生成しました。本記事では、技術的な準備の裏側をご紹介します。

要件定義

運営で話し合った中で出てきた要件は次の通りでした。

  1. アイコンを表示できる
  2. 氏名(ハンドルネーム)を表示できる
  3. 会話のネタとなる要素を表示できる

1と2については、「twitterなどでアカウントは知ってるけど、現実世界でお会いするのは初めて」という方々の交流を促す狙いです。3については、イベントの休憩時間などでお互いにより話しかけやすくなるよう、申込時アンケートで聞いていた「好きなスポーツ」を掲載しようと考えました。

既存技術の調査

調べたところ、素晴らしいウェブサービスが公開されていました。

yoshiko.hatenablog.jp

一方で、今回運営で話していた用途を考えると、次のような課題が挙げられました。

  • connpassの表示名が長いときに、途中で切れてしまう*2
  • アイコン・氏名(ハンドルネーム)に加える追加の要素を表示できない

GitHubにPRを出すことも検討しましたが、既存実装を理解する時間的制約などを考慮し、0から自作することに決めました。

データセットの準備

名札作成のためのデータセットは、connpassからダウンロードしました。自分が運営しているイベントの場合は「申込者の管理」ページから、参加者情報が掲載されたcsvファイルをダウンロードできます。

f:id:upura:20200209163118p:plain

csvファイルからは、次の情報を取得しています。

  • connpassのid
  • connpassの表示名
  • 好きなスポーツ(アンケートで取得)
  • 申込者ステータス(キャンセル含む)

Pythonでの実装

Pythonでの処理は、次の流れとなりました。

  1. pandasでcsvファイルからデータ取得・加工
  2. BeautifulSoupでconnpassのアイコンを取得
  3. PILで名札を作成・保存

最初に、pandasでcsvファイルを読み込みます。この時点で、申込者ステータスが「キャンセル」の方を取り除くなどの処理を挟んでいます。次に、csvファイルには格納されていないアイコンの画像データを、connpassのidをキーにしてスクレイピングしました。最後にPythonで画像を扱えるライブラリを用いて、名札画像を作成・保存しています。「connpassの表示名が長いときに、途中で切れてしまう」問題は、動的にフォントサイズを変える、もしくは改行を加える実装で対処しました。

おわりに

本記事では、connpassの情報を基に、イベント参加者用の名札をPythonで自動生成する方法を紹介しました。

GitHub+Dockerでソースコード・実行環境を管理していますが、スクレイピングを含む実装なのでソースコードの公開は微妙かなと思い控えています。もしご興味ある方がいらっしゃれば、個別にご連絡ください。

【論文メモ】Self-training with Noisy Student improves ImageNet classification

twitterで流れてきたGoogleの論文が、最近のKaggleでも頻繁に使われる「Pseudo Labeling」を拡張した興味深いものでした。本記事では、簡単にこの論文を紹介します。

論文リンク

Pseudo Labeling とは?

テストデータに対する予測値を目的変数の値とみなし、学習データに加えて再度学習する技法です*1。詳細は脚注1や、脚注1で引用されている記事*2をご覧ください。

本論文の概要

本論文の概要は下図に示されています。

f:id:upura:20200218124212p:plain

Pseudo Labeling の拡張という観点で見たときに、大きく2つの差分があります。

  1. ラベルを予測した追加データに適切にノイズを載せることでロバスト性を高める
  2. イテレーションの繰り返しで生じる性能の向上を定量的に確認している

ラベルを予測した追加データに適切にノイズを載せることでロバスト性を高める

「4.1. The Importance of Noise in Self-training」に議論があります。ノイズとして乗せたaugmentation, stochastic depth, dropoutの有無に応じた性能の変化を確認しています。

f:id:upura:20200218142202p:plain

Pseudo Labelingにおいて、ラベルを予測したtestデータをそのままtrainデータに追加した場合を考えます。そのとき改めてtestデータを予測をする際、全く同じデータがtrainデータに含まれているので損失が過度に小さくなり、学習が正常に進まない事態が発生し得ます。

本論文では、trainデータとして追加するtestデータにノイズを加える(augmentation, stochastic depth, dropout)ことで、上述の事態を避ける狙いがあります。

イテレーションの繰り返しで生じる性能の向上を定量的に確認している

「4.2. A Study of Iterative Training」に議論があります。下の表では、イテレーションを重ねるごとにAUCが高まっている様子が記載されています。

f:id:upura:20200218143308p:plain

Pseudo Labelingを繰り返すことで性能が向上する事例があることは、Kaggleなど機械学習コンペの参加者の経験則として報告されていました*3。本記事の実験結果もあくまで一例ではありますが、論文の形でまとめられている点は珍しいと思います。

おわりに

本記事では、Pseudo Labelingを拡張したGoogleの論文「Self-training with Noisy Student improves ImageNet classification」を紹介しました。根幹のアイデア自体は多くのKagglerにとってある意味当たり前な、実体験とも合うような内容だと感じます。

Pseudo Labelingの細かな部分は、機械学習コンペの課題やデータセットに応じて、いろいろな派生をしている印象があります。例えば「Kaggle本」には「品質を保つため予測確率が高いデータのみを追加する」「データのグループ分けを考慮して追加する」などの手法が紹介されています*4。本論文も、その派生の一つとして手持ちの案に蓄えておくと良さそうです。

本論文の「Appendix A.2.」には、8つの観点で気付きが掲載されています。こちらも機械学習コンペの中でPseudo Labelingを試す上での指針になる話だと思います。

  • Finding #1: Using a large teacher model with better performance leads to better results.
  • Finding #2: A large amount of unlabeled data is necessary for better performance.
  • Finding #3: Soft pseudo labels work better than hard pseudo labels for out-of-domain data in certain cases.
  • Finding #4: A large student model is important to enable the student to learn a more powerful model.
  • Finding #5: Data balancing is useful for small models.
  • Finding #6: Joint training on labeled data and unlabeled data outperforms the pipeline that first pretrains with unlabeled data and then finetunes on labeled data.
  • Finding #7: Using a large ratio between unlabeled batch size and labeled batch size enables models to train longer on unlabeled data to achieve a higher accuracy.
  • Finding #8: Training the student from scratch is sometimes better than initializing the student with the teacher and the student initialized with the teacher still requires a large number of training epochs to perform well.

*1:門脇ら, Kaggleで勝つデータ分析の技術, 技術評論社, p. 266, 2019.

*2:

*3:

*4:門脇ら, Kaggleで勝つデータ分析の技術, 技術評論社, p. 267, 2019.

「Sports Analyst Meetup #6」開催報告&発表まとめ

「Sports Analyst Meetup #6」を開催しました。

新型コロナウイルス感染症の影響を勘案し、直前に懇親会の中止を決定しての開催となりました。参加者の方々にご了承いただいた上、当日は運営に温かいお声がけをいただきましたこと、心よりお礼申し上げます。

spoana.connpass.com

本記事では今回の発表内容を簡単にご紹介します。公開されている発表資料やtwitterハッシュタグ #spoana の内容は下記にまとめています。

発表資料

spoana.connpass.com

togetter

togetter.com

ロングトーク①:オリンピック・パラリンピックに向けて国が行うサポート事業とは?/spoanaLT登壇のすゝめ

第1回のイベントでLTをしてくださった廣澤さんによるロングトークでは、ついに今年開催のオリンピック・パラリンピックに向けた取り組みについてご紹介いただきました。合わせて「spoanaLT登壇のすゝめ」として外部発表を通じた成功体験についても語っていただきました。

ロングトーク②:データ分析にPythonは必要ですか?なお野球の場合は

  • 中川 伸一(@shinyorke)さん
  • 株式会社JX通信社シニア・エンジニア

PyConでの野球分析の発表などで著名な中川さんには、スポーツ分析におけるプログラミングの立ち位置という観点について語っていただきました。ご自身のキャリア論も含めながら、中川さんにしかできないお話だなあと感じました。

LT

【野球】ストライクゾーンから見る「差別」の現状

球審と打者・投手の出身地域が違う場合に判定に影響が出るかを分析。サンプリングバイアスや因果関係など議論が難しい部分も残りますが、面白い課題設定でした。

【野球】プロ野球の打撃における損失回避

野球の打率を経済学的な観点で分析。「打率3割の前後で打者の行動に差が出る」という仮説を実データから丁寧に検証しており、こちらも行動心理学的な観点で面白い発表でした。

【野球】「流れ」の正体を考える

#spoana では珍しい自然言語処理案件📰。スポーツの「流れ」は存在するのかという問いを探るべく『日刊スポーツ』から「流れ」を含む記事を抽出して、どういう文脈で登場しているかを集計。精神衛生上の貢献を果たすのではという解釈を紹介しています。

【フィットネス 】次世代フィットネスアプリケーション

自作した「次世代フィットネスアプリケーション」の紹介。スマホなどで取得する加速度から、徒歩・ランニング・筋トレなどの動作を自動判定して計測。加速度だけでリアルタイム分類できていて凄いデモンストレーションでした。

【バスケットボール 】Bリーグではじめるデータ分析

Bリーグにおいてシーズンを重ねるごとにホーム勝率が高まっている様子を可視化。ファンが増える中で「ホームアドバンテージ」と呼ばれる文化が生じていく様が推察でき、解釈しているだけで🍺が進むデータでした。

【テニス】テニスのフォームの可視化

テニスのフォーム可視化について、姿勢推定のアルゴリズムが実際にどれくらい実用に堪えうるかという観点で検証。twitterでいろんな動画を上げてくださっているので興味ある方はご確認を。

【バドミントン】試合展開から結果を予測してみる

バドミントンの各ラリーごとの点数を説明変数としてランダムフォレストで予測モデルを作成。思いのほか精度が高く、データサイエンティスト的には時系列情報を盛り込んで遊んでみたいと感じました。

【サッカー】サッカーにおけるトレーニング強度測定と設定の検討

心拍数を軸にしたトレーニング強度を測る指標の設計話を実体験を基にお話してくださいました。心拍数の最大値は持久走の間にある程度正確に計測できる一方で、平常値や最小値は真面目に長時間付けてもらえないと正確に取れないなどのお話が興味深かったです。

おわりに

本記事では、今回の発表内容を簡単にご紹介しました。既に3名もの参加者の方にブログを書いていただいています。

yhiss.hatenablog.com

note.com

note.com

会場はNTTコミュニケーションズ株式会社SpoLive事業グループさまにご提供いただきました。とてもオシャレで快適な空間でした。

f:id:upura:20200217110207p:plain

XGBoostやCNNを用いた「Data Journalism Awards 2019」受賞作

Data Journalism Awards 2019」を受賞した全12作の中で、特に機械学習など高度なデータサイエンスを活用した事例があったので、簡単に概要を紹介します。

Radmesser

By ドイツの新聞社「Der Tagesspiegel

作品URL

interaktiv.tagesspiegel.de

受賞概要

https://datajournalismawards.org/projects/radmesser/

概要

課題背景

  • 自転車に乗る人たちから「追い抜きの車の接近が怖くて市街で自転車に乗りづらい」との声が挙がっていた
  • ドイツでは自転車に乗った人を車が追い越す際の接近距離に関する法的規制はあるが、この問題に関する具体的なデータは存在せず、おざなりになっていた

目的

  • データを収集し、定性的にとどまらない定量的な問題提起を発する

データ収集

  • スマートフォンアプリと、自転車に対する車の追い越し距離を測定できるセンサーキットを開発
  • 最初は100人の読者に配布、話題になり最終的な協力者は2500人に
  • 2カ月を経て総計13,500 km分のデータを収集し、17,000回の追い越しを記録

データ分析

追い越しイベントの検出

  • 「YOLO V3」の畳み込みニューラルネットワークアプローチで画像検出
  • 高速化のためにCUDA + NVIDIA GPUを用いた
  • 追い越しイベント3000件を手動で(!)ラベル付け
  • 画像情報を基に3000件でXGBoostを学習し、ラベルなし画像について予測
  • 予測した画像7000件について手動で(!)結果を確認
  • 発生していた追い越しのうち、56%は違法に近いものだと分かった

地理情報などの分析

  • ヘルメット、性別、インフラなど、データのさまざまな相関関係を調査
  • 行政が提供する道路および自転車インフラのデータセットも使用

結果の可視化

チーム構成

  • ジャーナリスト、物理学者、機械学習の専門家からなる学際的なチーム
  • 読者の協力者2500人

おわりに

本記事では、「Data Journalism Awards 2019」を受賞したドイツの新聞社「Der Tagesspiegel」の作品「Radmesser」を紹介しました。

データ取得・分析・可視化のプロジェクト全体の一連の流れがどれも優れている作品だと感じました。特に機械学習教師あり学習を上手に活用している点、かつ人力で丁寧な検証を重ねている点が素晴らしかったです。受賞概要の中で「jupyter lab」「pandas」「scikit-learn」「seaborn」「folium」といった馴染みのあるPythonパッケージも列挙されており、興味深い作品でした。

f:id:upura:20200131173907j:plain Photo by shota James on Unsplash

「Media Innovation Meetup #11 AIでメディアはどう変わるか」参加録 #MediaInnovation

「Media Innovation Meetup #11 AIでメディアはどう変わるか」に参加しました。6人の方々が登壇しました。

本イベントはブログ枠で参加したため、本記事にて簡単な参加録をまとめます。

「AIとメディアのこれから」と題して、近年発展が著しいAIがメディア作りにどのような影響を与えていくかというテーマで、この分野で活躍されている6名の講師の方をお招きします。

mi-ai.peatix.com

株式会社レッジ 執行役員 飯野希氏

  • AIメディアの中で国内最大PVを誇る「Ledge.ai」の編集長も務める飯野さんのお話
  • 2017年設立で従業員60人程度
  • メディア事業だけではなく、コンサルティングなどAI業務支援も担っている
  • 画像処理、自然言語処理、時系列処理など、メディアに適用できる範囲は広い
  • いろんな使い方ができるがゆえに、今後は何をもって「幸せ」とみなすかなどの設計部分が大切になってくるだろう

ストックマーク株式会社 社長室長 森住祐介氏

  • 2016年設立の自然言語処理スタートアップ
  • A news, A strategy, A salesなど、業務・組織に寄り添うサービスを展開

SoVeC株式会社 代表取締役社長 上川衛氏

  • クリエイティブ(動画)を自動生成するウェブサービス「SoVeC Smart Video」を展開
  • β版機能として、SRGANを応用して画像の解像度を上げるような取り組みも

株式会社テモラボ 中野賀通 代表取締役社長

Atlas Associates株式会社 宮野貴行CEO

株式会社JX通信社 代表取締役 米重克洋氏

  • 「報道の機械化」でビジネスとジャーナリズムの両立を目指す
  • 「FASTALERT」「NewsDigest」「JX通信社世論調査」のサービスを展開
  • テクノロジーで、報道産業で発生している負のスパイラルを食い止める(コストダウンと質的向上の両立を目指す)
  • SNS報道活用のメリット
    • 1 当局から得られない情報も収集可能
    • 2 写真や動画で現場の状況確認も可能
    • 3 取材の「初動」が早くなる
  • 新聞読者別の「安倍政権支持率」などのアグレッシブな企画、金がかかるのに儲からない選挙報道なども展開できる
  • 報道産業を成長産業に

おわりに

技術的に高度な議論はほとんどなく「AI」に終始してしまっていた点が残念でしたが、個人的な興味関心の強い分野の話を数多く聞けた点は面白かったです。いくつか本イベント前には知らなかった会社もあり、勉強になりました。

「Data Gateway Talk vol.5」に参加しました&全発表まとめ #dgtalk

データアナリスト/データサイエンティストの登竜門 (Gateway to Success) となることを目指した勉強会「Data Gateway Talk vol.5」に参加しました。

data-gateway-talk.connpass.com

対象を絞った勉強会で以前から関心はあり、今回が初参加です。

本記事では、全発表について概要と所感を述べます。

データ分析業務を1年間やって実感したこと

奥田 悠貴さん(スイッチ・メディア・ラボ)

発表資料

概要

所感

「依頼者が結果的にしたいのは意思決定なので、意思決定を促進するためのデータが必要」「分析の手法よりも、意思決定に結びつく結果の見せ方を試行錯誤するのはもっと大事」など、共感できる言葉が多かったです。自分の考えと近い部分が多く、納得感のあるお話でした。

「データ分析」の解像度を上げたい

松村 優也さん(Wantedly

発表資料

概要

  • Wantedly Visit の推薦システム全般のマネジメントに関わっている松村さんのお話
  • 「データ分析」が示すものが曖昧なため、組織・個人間で期待値のズレが生じているのではないかという問題意識
  • 樫田さんのブログなどを引用しながら、松村さんなりの「データ分析」論をまとめつつ、個人や組織でも共通の認識を持てると良いのではという提言で締めた

所感

冒頭で例として出てきた「Kaggleでメダルを取っている学生をインターンで採用したが上手くマッチしなかった」といった話は、データサイエンスやAIなどのブームに伴い発生しがちな案件だと思います。絶対的な正解はない話ですが、個人だけではなく組織で共通の認識を醸成していく取り組みはとても大切だなと改めて感じました。

GBDTアルゴリズム Gradient Boost Decision Tree with Iris Data

Yasshieeeeさん(工学院大学

発表資料

概要

  • 情報学部で学ぶ大学生のYasshieeeeさんのお話
  • Kaggleなどで有名な機械学習アルゴリズムである勾配ブースティングについて、理論面から解説
  • 具体的な実装ライブラリであるXGBoost, LightGBM, CatboostをIris Dataに対して実行・比較

所感

今回の勉強会の中で理論面から扱うのは難しそうな中で、噛み砕いた解説を試みていたのは素敵でした。

Hivemallを使ってSQL機械学習

馬場 はるかさん(ブレインパッド)

発表資料

概要

  • ビッグデータを扱う「Hadoop」上でSQLクエリを用いて機械学習を実行できるライブラリ「Hivemall」を解説
  • SQL内で学習を実行するとモデルがテーブルとして保存され、このテーブルを読み出して予測した結果もテーブルとして保存される
  • デジタルマーケティング領域における機械学習システム組み込みを例に、データベース内部で機械学習の一連の処理を完結させられる利点などを紹介した

所感

HadoopやHivemallは、ほとんど名前くらいしか聞いたことがない状態でした。環境を用意するリソースの削減、加工・転送の実装の割愛など、実運用面で非常に有益な選択肢だと感じました。

SHAP(SHapley Additive exPlanations)で機械学習モデルを解釈する

森下 光之助さん(TVISION INSIGHTS)

発表資料

概要

所感

SHAPについて理論から実装まで丁寧に解説された良い資料だと思いました。単に機械学習ツールとしての紹介をするだけではなく、協力ゲーム理論の部分から紐解いて説明しているのが個人的に好感度が高かったです。

リサーチデータと付き合うために大事なこと

池澤 龍星さん(FiNC Technologies)

概要

  • FiNC Technologiesでグロースエンジニアとして働く池澤さんのお話
  • 分析・実装・振り返りのサイクルを回している中で得られた学びの共有
  • ユーザデータの抽出や回答データの分析に時間がかかる課題について、処理の自動化やクラウドサービスの利用などで対処した

所感

自分も業務の中でデータ分析部門の立ち上げメンバとして関わってきたので、Redashによるデータの民主化や自動化・定期実行の仕組みづくりなどのお話は懐かしい気持ちになりました。「知見のある人を巻き込む」「困ってる人と議論する」「本質的な課題を解決する」なども、ご本人の体験談に基づく納得感あるお話だったと感じました。

意思決定に回帰分析を利用した話と3つの学び

二見 大揮さん(Retty)

発表資料

概要

  • Rettyでデータアナリストとして働く二見さんのお話
  • 意思決定に回帰分析を利用した中で得られた知見の共有
  • 手順:①意思決定者を把握②何の意思決定をするかを把握③どういう分析結果が出ると良いのかの擦り合わせ
  • 分析設計:①説明変数をMECEに②交互作用の掛け合わせは後回し③施策の打ちやすさや季節要因を考慮
  • 評価:①精度は参考程度に②p値や信頼区間の議論③意外な説明変数は考察が必要

所感

Rettyのデータ分析チームは地に足ついた分析を着実に実行している印象を持っています。その印象通り、回帰分析を用いる中で陥りがちな点をステップごとに丁寧に議論した良い発表でした。

データ分析とベンチャーと上場とキャリアの話

太田 満久さん(ブレインパッド)

発表資料

ohtaman.github.io

概要

  • ブレインパッドでChief Data Technology Officerという役割を担う太田さんのお話
  • 新卒でベンチャー(当時の従業員数60人)に入って上場を経験した体験談から、学生や若手のデータサイエンティストに向けたキャリア論
  • 非公開情報も含めて、働き方・金銭面・経営陣との関わり・コミュニティ活動など

所感

プレイヤーからマネージャーになる過程での失敗談や、コミュニティ活動の大切さに気づいた経緯など、生々しい貴重な話がお聞きできました。現在の会長から伝えられて印象に残っているという「Quick & Dirty」(完璧でなくとも速くアウトプットする、フィードバックのループを回せ)というお言葉など、メッセージ性に富んだ発表でした。

Podcastでは現職についてお話をしているらしく、こちらも帰宅後に拝聴しようと思います。

おわりに

本記事では「Data Gateway Talk vol.5」の全発表について概要と所感を述べました。

f:id:upura:20200116190908j:plain