nikkie-ftnextの日記

イベントレポートや読書メモを発信

読書ログ | 『 #評価指標入門 』3章・4章でついに分類の評価指標の全体感を掴めました(2月の #stapy 予習) #架け橋本

はじめに

ブラボー!! nikkieです。

今週木曜日2/16は19時からオンラインでみんなのPython勉強会 (a.k.a stapy)「新刊本から知る機械学習の今」
予習リストエントリを公開し、予習を進めています。

今回は『評価指標入門』について現時点の感想をアウトプットしちゃいます!

目次

『評価指標入門』(架け橋本)

2023年2月18日に紙版・電子版発売!
献本や先行販売により、Twitterでは盛り上がりの兆しを見せています。

私も献本いただきました1。ありがとうございます!

架け橋本はこんな本です!

『評価指標入門』、どんな本なんでしょうか?
gihyoさんのページではこの疑問にズバリ回答していました。
以下に引用します。

機械学習モデルの”良し悪し”を決めるときには,評価指標(Evaluation Metrics)を必要とします。
本質的に評価指標の設計方法は自由であり,ビジネス上の価値を考慮して自ら作成することも可能です。
(略) では評価指標はどのように決めるのが良いのでしょうか。(略)

本書はこれらの疑問に答えるため,機械学習の良し悪しを決める評価指標を軸に,解くべきビジネスの問題をどうやってデータサイエンスの問題に落とし込むのか,その原理を解説していきます。(略)

回帰,分類で使用するスタンダードな評価指標についても,基本から丁寧に解説します。
本書を読むことで,どのようなケースでどの評価指標を選ぶべきかがわかり,評価指標の読み間違いを避けることができます。

架け橋本の構成

4章+付録という構成です(詳しくはgihyoさんのページをどうぞ)

  • 1章 評価指標とKPI
  • 2章 回帰の評価指標
  • 3章 二値分類における評価指標
  • 4章 多クラス分類の評価指標
  • 付録 ビジネス構造の数理モデリング

2章〜4章のコードが公開されています

分類問題に取り組むことが多いので、3章・4章をまず読みました。
この部分(と2章)を執筆された長田さんにstapyで登壇いただくので、予習も兼ねています。
精読したわけではなく、インデックスを作るのを目的にした読みです。

nikkieの前提知識

  • 2018年くらいから機械学習を独学し、2019年からデータサイエンティスト(自然言語処理
  • ビジネスの問題をデータサイエンスの問題に落とし込む経験が豊富というわけではありません
    • データサイエンティストとして働く中では、落とし込まれたデータサイエンスの問題に対してエンジニアリングでアプローチすることを主にやってきました
  • 評価指標については、『Kaggleで勝つデータ分析の技術』の「2.3 評価指標」を過去に読んだくらいです
    • 自分のものにできているかというと、全然そうは言い切れないというレベル感です
    • 個々の指標について、使うときにscikit-learnのドキュメントをあたりにいくのですが、なかなか掴みきれないという感想を抱きます
  • 著者のお二人とは同僚だったというつながり2があります(献本ありがとうございます!)

感想:数式・ビジネス・コードのほどよいバランスでサクサク入門できました

gihyoさんのページ記載の通り、分類で使用するスタンダードな評価指標について、基本から丁寧な解説でした。
「入門」としてほどよく、分類で普段から使っている評価指標たちの理解を深められそうという感触を得ました。
これは私にはすごく大きかったです。

分類の指標の解説は以下のような構成で、私は丁寧で分かりやすいと感じました。

  • 評価指標を求める数式をもとに性質を説明
  • 性質をもとにビジネスにおいてどんなときに使えるか解説
  • scikit-learnに実装された指標の使い方を解説(Pythonコード
    • scikit-learnにない指標は実装を紹介

数式とコードのほどよい割合、私はかつてキカガクのUdemy講座を受講したとき3を思い出しました。
なお本書の場合はそこにビジネスについての解説もアドオンされています!

3章・4章の学び

3点書きます。

二値分類の評価指標(3章)の理解をベースに多クラス分類の評価指標(4章)が解説されます4
(1) 二値分類の評価指標では、不均衡データにはaccuracyは使えないという「私も知ってる!」という話題(3.4)があったり、ROCについての丁寧な解説(3.10)があったりしたのが印象に残っています。

(2) 多クラス分類の評価指標について、これまで「よく分かってないな」と感じていたのが、macroとかmicroとかweightedとか5です。
ここに関しては4章の解説を読んで、「あとは手を動かしたら分かりそう」とついに完全理解への道が開かれました。
例えば以下をそうなる理由(数式)込みで知られたのが大きいです。

"Micro"の評価指標は、正解率、再現率、適合率、F1-scoreに関してはすべて等価 (p.239)

今後の写経を通してもっと理解を深められそうです。
個人的にはscikit-learnの中身を見に行きたいですね(←外れ値の感想)

(3) 3章・4章ともにKaggleのdatasetsとして公開されているデータセットを用いて、ビジネスと結び付けて評価指標を決める例も紹介されます。
私自身はこういう経験は多くないので、経験豊富なデータサイエンティストの思考過程の一端を覗けるのは非常に学びになると感じました。
書籍を開かずに自分で同じ結論を出せるようになれば、データサイエンティストとしての自信にもなりそうですよね。

伸びしろを自覚:これまでのインプットと結び付けて伸ばせる

これまでresbtさんの論文で、モデルの評価(Evaluation)の枠組みについて理解を深めてきました。
ホールドアウトや交差検証でデータセットをどう分割するのがいいのかといったことです6

こちらの論文ですが、評価指標については(主題でないので)掘り下げていません。
今回『評価指標入門』を紐解いたことで、resbt氏論文と『評価指標入門』を掛け合わせて、モデルの評価を自身のデータサイエンス力の軸の1つにできるかもと閃きました。
評価指標の理解を深めることでこれまでのインプットと掛け合わさるな〜と気付けて、読んでいてテンションが上がってました。

データサイエンティストの3つのスキルを思い出す

3章・4章を読み終わったあと、データサイエンティストのスキルに3つある(データサイエンティスト協会発表)というのを思い出しました。

http://www.datascientist.or.jp/files/news/2014-12-10.pdf

  • ビジネス力
  • データサイエンス力
  • データエンジニアリング力

3章・4章では、評価指標を数式から理解と「データサイエンス力」強化に効く印象です。
scikit-learnのmetricsの使いこなしも知られるので、「データエンジニアリング力」にも部分的に効能があると思います。

まだ読んでいない箇所ですが、1章や付録は「ビジネス力」に効きそうです。
つまり『評価指標入門』は副題の「データサイエンスとビジネスをつなぐ架け橋」の通り、「ビジネス力」と「データサイエンス力」を培える、そしてデータサイエンティストとして実務で架け橋となれる、そんな1冊ということなんじゃないかと思います!(←オタク特有の深読みしすぎかも)

終わりに

みんなのPython勉強会に向けて『評価指標入門』で長田さんが書かれた箇所から3章・4章を予習しました。
独学を始めてから5年、ついに、分類の評価指標の全体感を掴めた感覚があります7
勉強会での発表も楽しみになりました。

献本いただき読む機会を得たのですが、「評価指標を深く知ることって自分に今すぐ必要なことなのかな」と思っていたことを白状します。
この本で紹介される評価指標とscikit-learnでの実装は、私には評価指標の知の高速道路でした。
この本でscikit-learnのmetricsはかなり使いこなせるようになると思います。
機械学習コンペや実務でscikit-learnを扱うことがある方は、見かけたら手に取ってみていただけると、人によっては本当に素敵な出会いになるんじゃないかと思います!

P.S. みんなのPython勉強会の構成すごいのでは(再度のスタッフ自画自賛

架け橋本はKaggleのデータセットを例に使います。
Kaggleと言ったら先日発売の極意本!(『Kaggleに挑む深層学習プログラミングの極意』)
この2冊、ゆるく繋がっていて、内容としては掛け合わせられるように思われます!

そして、『Python機械学習プログラミング PyTorch&scikit-learn編』は、機械学習を本格的に押さえられるシリーズです。
評価指標以外の部分もバッチリですね。

つまり、2月のstapyは取り上げる書籍に補完関係があって、まさに機械学習の今を体験できそうですね!
ご参加お待ちしています〜


  1. 身内びいきするつもりは一切ないですが、書いておかないのもフェアじゃないかなと思って書きました
  2. 監修のO・MO・Iにもありますが、評価指標を網羅してはいません。「逆に書いていないことでいうと「学術書・論文から評価指標を徹底的に調べ上げ全列挙」はしていません。これは本質的に無意味です。
  3. average引数に渡す文字列のことです。例:https://scikit-learn.org/stable/modules/generated/sklearn.metrics.f1_score.html
  4. 例としては「私の意見としては、ラベル付きデータを3つに分けます」from 読書ログ | 『Kaggleに挑む深層学習プログラミングの極意』石原さんによる1章・2章は極意と例が目白押し!(2月の #stapy 予習) - nikkie-ftnextの日記
  5. 自分のものにするために写経せねば!