PTAのアドベントカレンダーの記事になります。
広告データの学習データ基盤を刷新しているのでその話を書きます。
広告データの学習データ基盤とは
広告配信システムではctr/cvrの予測をするために、imp,click,cvデータを使って、機械学習モデルを作り、学習させています。
今回はそのモデル学習に学習ログデータを転送、作成するシステムの刷新になります。
今までの学習データ基盤の構成
主にflumeを使ってログ転送しているのですが、前段にflume2台挟んでいたり、ignite使って、正例負例ラベルを作り、最後に学習データの加工をやって、モデルの学習を行っていました。
igniteは主に遅延してくるclick,cvデータを紐づけるために使われていました。
今ままでの問題点
-
システムが複雑になりがち
バリデーションやデータ結合システム、学習データ加工するシステムとわかれていたり、似たようなことやっているのに、ctr/cvrなどでインスタンスが分かれていたりで、共通部分の修正の場合、リリースを複数回やらないといけない -
igneiteを使っているシステムで定期的にOOMが発生する
-
インフラコスト
新学習データ基盤の構成
刷新後はバリデーションや正例負例作成システムや学習データの加工のシステムを1つにまとめました。
ctr/cvrの学習データを作成するのも1つのシステムで担うので、コストや複雑化の回避を図っています。
また、今までigniteが担っていた役割をredisに任せ、キースペース通知でttlイベントを拾い、遅延してくるclick,cvデータを紐づけています。
(kinesisファミリーを使うプランもありましたが、コスト的に断念)

実際にリリースしてみて
完全切替えはまだできてないのですが、負荷テストやリリースしてみてですが、負荷的には大きな問題はなさそうで、コスト削減もできるのではないかと思います。
苦労している点は既存システムのデータと刷新システムのデータでそれぞれモデルを作って、オフラインのメトリクスで差分があった際の調査方法ですかね。
ここは何か良い方法を考えていきたいです。

