CTR/CVR予測システムの開発
横断組織としてWeb広告入札のための機械学習プラットフォームの開発を行なっています. CTR/CVR = DSPのリクエストから得られる入力に対してその広告が将来的にクリックされるか,コンバージョンするかを確率的に予測するタスクを実装しています. GCS上の所定の場所にアップロードされたデータに基づいて学習を行い、合わせて提供しているクライアントライブラリで学習結果をロードし,入力に対する予測が行えるというシンプルなものです. 具体的には、下記のパイプラインがKubernetesでホストされたAirflow上で動作する仕組みです. GCS (データの受け取り) => データの結合 + サンプリング (BigQuery) => 特徴選択(Lasso) => 学習(Logistic Regression, Factorization Machine) => 評価(AUC, LogLoss, Normalized Entropy) => 予測, および学習結果の可視化 実装ももちろん行いますが,私自身の主な役割はアーキテクトに近いです. データサイエンティストの意見を取り入れつつ,どういうものが必要かを見積もり,システムとしての設計を行うこと.そしてその利用方法をユーザに周知し,実際に接続してもらうための調整を行ってきました. アーキテクトとしてまず行ったのはクラウドの選定です. 選定の過程は記事としてまとめているのでそちらをご覧いただければ幸いです. https://qiita.com/Saint1991/items/8c19fd9cbaccf2284083 実装面では,GCS => BigQueryへのデータ読み込み,結合,サンプリングを行う処理の開発を担当しました. こちらはパイプラインとしてだけでなく,アドホックな分析で利用するデータの生成にも使えた方がよいという考えからGo言語のCobraというライブラリを使ってCLIとして開発しました. また,ユーザと接続の調整をしている際に,中でどんな学習が行われているのか把握したいという声が多かったため,学習時のメタデータやモデルパラメータを収集,可視化する機能を実装しました. Airflowは他のワークフローエンジンと異なり,XComという各タスクの実行結果を受け渡しできる機能が備わっています.これを利用し,各タスクのメタデータを受け取り,DBに投入.その後SuperSetを利用して可視化するという部分を実装しました. 現在可視化しているのは次のような項目です, 教師データ/テストデータにおける各クラスごとのデータ数 データのイベントタイムの期間 training/validation lossの変遷 AUC/Log Loss/Normalized Entropy Logistic Regression, Factorization Machineのモデルパラメータ 各フィールドごとのユニークな素性の数 BIツールはre:dashと比較検討しましたが,SuperSetはバックエンドに必要な最小コンポーネントがDB一つで済むのに対し,re:dashはRedis, PostgreSQLが必須だという点から,管理コストを考えSuperSetを採用しました. 他にもクラウド上のリソースをTerraformを使って全てコード化したり,KubernetesへのリソースのプロビジョニングをAnsibleで行ったりと,ややインフラに近いレイヤーも担当しています.