はじめに
こんにちは。@mktoX です。
1年ほど前に機械学習を使用した機能の実装および改善をする機会をいただき、
- 勾配ブースティング決定木による二値分類を用いた成約予測
- Embeddingsを用いた文書の類似検索
- ランキング学習を用いた検索精度の向上
について検討を行ってきました。
本記事では、それらをやっていくなかで気づいた機械学習・AI系施策を効率良く進める方法について
- 前提編
- データ編
- 検証編
- テスト運用編
の4つの観点に分けて書いていきたいと思います。
対象
- これから機械学習・AI系施策やっていきたい方
- なかなかテスト運用に進めない方
前提編
どう解決するか考える
まず、その課題は機械学習でやる必要があるか考える。
そして機械学習だけで解決を出そうとしないことも大事。
例えば、機械学習で検索結果の並び順を最適化するのみでなく、
ルールベースでのフィルタリングも組み合わせると
納得感のある検索結果になったりする。
ゴールを設定する
どの程度の性能があれば本番環境でテスト運用できるか、
機械学習の評価指標だけでなくビジネス面の指標を使って説明できるとよい。
また、例えば検索結果の並び順など、
如何に最適かがフィーリングによる部分が大きい場合、
本番環境でも使えそうか実際使用する方に確認してもらうことも考える。
データ編
ドメイン知識を得る
ドメイン知識があると、
- 特徴選択がやりやすくなる
- 予測結果に影響する特徴がイメージしやすくなる
- リークに気づきやすくなる
ドメイン知識は詳しい人から聞いたり、コードから読み取ったりする。
データにアクセスしやすくする
Metabase等のBIツールがあるなら使用させてもらえるようにするとよい。
対象データを集めたりデータの時系列を確認したりなど、
データを参照する機会は何度もある。
ただカンマで区切られたデータしか出せない状況とかだと、
DataFrameに変換するだけでも時間がかかってしまう。
検証編
検証は小さく早く回せるようにする
最初からあらゆる特徴量を試そうとしない。
データの収集加工にも時間がかかる。
これに時間をかけていると進捗らしい進捗を出せずに苦しくなる。
まずはモデルにデータを学習させて予測値を出せるところまで作り、試せるようにする。
少ない特徴でも良い結果が出ることもある。
テスト運用編
まずは必要最低限の構成にする
モデルを自動更新させる等、最初から作り込まない。
まずは本番環境でも効果が出るか確認して、
どうすればより良くなるかを考えられる状態を作る。
早くフィードバックを得てモデルやシステムの改善にまわす。
最低限、エラー検知や監視の仕組みは要る。
本番環境では予期していなかったデータが来ることもある。
加えて、モデルの性能の低下や変化がないかの監視は必要。
実際の例を挙げると、
AWS Lambda + Route 53でデータを加工し予測値を返すAPIを作った。
モデルは手元(Google Colaboratory)で学習させ、AWS Lambdaに格納していた。
監視については、
Metabaseで予測結果と評価指標とビジネス面の指標をみるSQLを書き、
モデルの性能の低下や変化がないかを定期的にみていた。
まとめ
機械学習・AI系施策を1年程度やっていくなかで気づいた効率良く進める方法について、
4つの観点から書いた。
- 前提
- どう解決するか考える
- ゴールを設定する
- データ
- ドメイン知識を得る
- データにアクセスしやすくする
- 検証
- 検証は小さく早く回せるようにする
- テスト運用
- まずは必要最低限の構成にする
おわりに
よかったらいいねや感想等いただけると嬉しいです。