実タスクで機械学習を導入するまでの壁とその壁の突破方法

社内で機械学習の案件があった際に、機械学習の経験者しか担当できないと後々の引き継ぎで問題が起こりがちです。これを防ぐために、機械学習に興味があり、これまで機械学習を経験したことがないエンジニアにも担当できる体制を整えられることが望ましいです。しかし、機械学習のことに詳しく知らないディレクターやエンジニアにとっては、どのような機械学習の理解段階ならばタスクを任せられるかの判断をするのはなかなか困難です。そこで、このエントリでは機械学習を実タスクでやるまでに乗り越えるべき壁だと私が思っているものについて説明します。

第一の壁: 綺麗なデータで機械学習の問題を解ける

  • 講義で扱われるような綺麗なデータを扱える
    • 行列形式になっていて、欠損値や異常値もない
  • 上記のデータを回帰や分類問題として解くことができる
    • 実際に解く際にはライブラリを使って解いてよい
    • 手法を評価する上で何を行なえばよいか(PrecisionやRecallやRMSEなどを計測する)知っている
  • アルゴリズムが導出できなくてもよいが、その手法がどういう問題を解いているのかは大雑把に分かる
    • 回帰/分類だったらどういう目的関数を最適化しているか
    • その目的関数の心はどういうものか
    • 学習や予測がうまくいかないとき、どこに着目すればよいか分かる

第二の壁: 綺麗でない現実のデータで機械学習の問題を解ける

  • 整形されていないデータを機械学習で扱える特徴量の形式特徴量に落としこめる
    • 例: テキストデータをBoW形式に落とせる
    • 例: 異常値、外れ値は前処理で落とせる
  • 必要なパフォーマンスが出るようにチューニングができる
    • 特徴量選択、正則化項、頻度での足切りによるチューニング、ラベル数の偏りがある場合などへの対応
    • 「多少のゴミがあってもいいから取りこぼしが少ないようにして欲しい」「取りこぼしがあってもいいからとにかく綺麗な結果を見せたい」等の要望があったときにどうチューニングすればいいか想像が付く

第三の壁: 機械学習の問題としてどう定義し、サービスに導入していくか

  • その問題は機械学習で解ける問題なのか、そもそも機械学習で解くべき問題なのかの判断が付く
  • 機械学習で解くことが決まったとして、どのように定式化するのか
    • 例: ランキング問題として定式化するのか、分類問題の組み合わせで対処するのか
  • 学習用データや評価用データをどうやって作る/集めるか
    • そもそもどの程度学習/評価データがあればある程度安定して学習/評価できるか知っている
    • 一貫性のあるデータ作りのガイドラインを作れるか(結構難しい…)
    • 闇雲に教師データを追加しても精度は上がるとは限らない

これらの壁をどう乗り越えていくか?

  • 第二段階までの壁は機械学習に関する書籍やBlogやライブラリが最近は山のように存在するので、ハードルは相当下がっている
    • はてなの教科書もあります!
    • 逆に教材がありすぎて何からやればよいか分からない…、という悩みは最近はあると思うので、問題に合わせた最短経路を経験者が示せるとよい
    • kaggle等で未経験者と経験者で同じ問題を解き、どのような工夫をすると精度が上がるか等を一緒にやってみる
  • 第三の壁は経験によるところが大きいため、経験者がメンター的に付いてアドバイスしながら手を動かせるとよい

第四の壁: 機械学習導入後の運用

言語処理のための機械学習入門 (自然言語処理シリーズ)

言語処理のための機械学習入門 (自然言語処理シリーズ)