🐙

データサイエンティストが1からwebアプリケーションを作ってみた

2023/09/07に公開

はじめに

こんにちは、D2Cのデータサイエンティストやっている遠藤です。

本記事では、非エンジニアのデータサイエンティストが1からwebアプリケーションを作って、社内プロダクトとして使用されるまでの経緯を背景からお伝えできればと思ってます。

本職としてwebアプリケーションを作っている方からすると拙い部分もあると思いますが、今回の記事を通じて、「D2Cには、データサイエンティスト自身が課題に思ったことを、かたちとして実行できる環境があるんだな」と、そういうふうに思ってもらえたら幸いです。

※ 開発環境はAWSを用いており、サービスの名称は略称にて記載しています。

背景

広告配信を行う際にセグメント(配信するユーザーの集まり)をあらかじめ決めることがあります。D2Cでは、そのシーンにおいて機械学習を用いて広告効果の最大化を図ることも少なくありません。当社ではビジネス側から要望があった際、データサイエンティストがデータ加工〜学習/予測まで行なってセグメントを作成・提出しています。このプロセスを自動化して全体的なフローを効率化できないかと思い、今回webアプリケーションを作りました。

セグメントとは

広告配信をする際に、予めどのようなターゲットに送るかを決めることができ、このターゲットとなるユーザーの集まりや区分のことをセグメントと呼びます。一般的なセグメントとして、広告配信会社ごとに事前に用意されたもの(興味・関心など)も多くありますが、より広告効果(CVR)を高めるために、機械学習を用いて個別に最適なセグメントを作成することもあります。

課題

背景でお伝えした中には、大きく2つの課題がありました。

  1. 担当するデータサイエンティストによって作成方法が違うため、再現性が低い&工数がかかる
  2. ビジネス側がデータサイエンティストに気軽に依頼しづらい環境にあった

1.に関しては、依頼を受けた際、その時稼働が可能なデータサイエンティストが担当していたので、その人特有の学習データや特徴量が利用されていたりと、決して再現性が高いものではありませんでした。また、依頼に対して常にフルの稼働時間を割けるわけではないので、データを学習するために加工しさらにセグメント作成を行うまでに、依頼から5〜10営業日程リードタイムが必要でした。
2.に関しては、ビジネス側とデータサイエンティストの繋がりが薄く、どこに問い合わせていいのかすら分からないような状況にありました(現在では社内でデータ活用が推進されていることもあり、協業する場面も増え、課題に感じていた時に比べると徐々に改善しています)。

これらの問題を打破するために、ビジネスサイドが指定の条件を自身でwebアプリケーションに入力することで、自動でセグメント作成までが行える仕組みを作りました。

アーキテクチャ

全体のアーキテクチャは以下の通りです。
全体アーキテクチャ

作成フロー

  1. ユーザー(ビジネス側)がwebアプリケーション(Fargate)でセグメント条件(商材、年齢/性別/居住地などのユーザー属性)を入力
    ※ webアプリケーションはFlaskを用いてDocker imageにしてFargateで動かしています。
  2. webアプリケーションに入力されたデータをS3に格納
  3. webアプリケーションからS3のpathをパラメーターとして入力し、Glueをキック
  4. GlueからSageMakerをキックしてタスク監視(タスクが失敗したらSlackに通知)
    ※ SageMakerも機械学習のコードをDocker imageにして実行してます。
  5. SageMakerで作成したセグメントをSlackに送信

今後の展望

想定を超える利用数があり、一時期SageMakerのタスク上限数に引っかかり大量にエラーがSlackに流れることもありました(こちらは上限数緩和で対処しました)。
正直なところ、こんなに使われるならもっと早く作っておけばよかったとも思います。

まだリリース初期なので改善点もたくさんありますが、機械学習を用いたセグメントを即時に作成できることで、広告効果を高める手段の1つとして提案の手助けになればと思ってます。

まとめ

今回は「データサイエンティストが1からwebアプリケーションを作ってみた」というテーマのもと、データサイエンティストの業務としてはやや範囲外ですが、課題を解決できるような仕組みを作ってみました。
最初はwebアプリ作ったことがなかったので多少の不安もあったりもしましたが、なんだかんだ形になるまで作りあげることができましたし、そういったことを実行できる環境があったことも、今振り返るとよかったなと思います。また、学習データを事前に日次バッチで作成する仕組みにしたことで、本業務のリサーチでも、論文の手法などを実データで実装検証する際に簡単に利用できるようになりました。この部分が効率化されたことも副産物として大きかったと思います。
webアプリケーション初心者ですが、今後はもっと勉強して自分が行なってきたことをサービス(プロダクト)として提供できるようになれたらと思います。

最後までお読み頂きありがとうございました。

D2C m-tech

Discussion