KAKEHASHI Tech Blog

カケハシのEngineer Teamによるブログです。

AI在庫管理の需要予測、発注レコメンド機能の技術スタックをご紹介

こんにちは、この秋リリースしたMusubi AI在庫管理の開発チームでデータサイエンティスト・エンジニアをしている保坂です。

こちらの記事はカケハシ Advent Calendar 2021の10日目の記事になります。

今日はAI在庫管理における需要予測・発注レコメンド機能で使用している技術スタックを紹介したいと思います。

これまでAI在庫管理チーム、とくにその需要予測・発注レコメンド機能の開発についてはあまり技術発信を行うことができておらず、今回がはじめての記事投稿ということで、技術スタックのご紹介を選択しました。

需要予測・発注レコメンド

コスト、スケーラビリティの観点から、マネージドサービスを多く活用した構成になっています。モデリングの道具には、もちろん精度面を担保しながらにはなりますが、新規メンバーが参画しやすいよう、極力標準的なものを活用しています。

forecast technology stack

インフラ

Fargateで需要予測や発注レコメンドを計算させ、Step FunctionsでFargateの処理をオーケストレーションさせる方法を採用しました。これは以下の理由からです。

  1. 薬局ごとに処理を独立させたいため
  2. 薬局数に対するスケーラビリティを確保したいため

LambdaはStep FunctionsからFargateの処理を起動する際の仲介役や、Step Functionsを起動するためのトリガーとして使っています。Step Functionsから直接各種のサービスを呼び出せるようになってきているので、徐々に仲介役のLambdaをなくしていきたいと考えているところです。

スケーラビリティの面は、当面は追加の対策を取る必要がなさそうなので、この技術選定で良かったなと思っています。

モデリング

需要予測モデルの構築には、以下の2点からFacebookが開発したProphet というライブラリを採用しました。

  1. AI在庫管理では多数の医薬品に対する需要予測を行う必要があるため、どんな場面でも安定して高い精度が得られること
  2. 内部的にベイズ時系列予測モデル用いており、チューニングすべきハイパーパラメーターが比較的少なく抑えられていること

需要予測モデルのインプットを作る際に回帰モデルを使う場面があるのですが、そのためには、業務はもちろんのことKaggleのようなデータ分析コンペティションなどで非常によく使われるLightGBMを利用しています。LightGBMはテーブルデータを用いたモデリングではデファクトスタンダードとなっており、すぐに採用を決めました。

また発注レコメンドを作る際には、需要予測結果と各種の業務要件を考慮したレコメンドを作るために数理最適化を用いるのですが、この実装にはPulpを用いています。Pulpを用いると最適化問題を可読性高く実装する事ができ、また、バックエンドエンジンとしてさまざまなソルバーを使用することができるので、よく利用しています。

AWS上のリソース構築にはCDK(TypeScriptにより記述)を用いています。インフラの記述を、DSLではなくクラスのようなプログラミング言語の標準的機能を用いて行うため、型チェックやエディターからのサジェストの恩恵を受けられるのがとても便利で、開発が効率よく進むと感じています。

その一方で、定義されているリソースが増えてきて、デプロイに時間がかかるようになってきたため、弊社ブログ記事「AWS CDKによるデプロイ作業を高速にするには?」 にある方法を試してみようと考えているところです。

歴史的経緯によりETLではインフラ構築にTerraformを、需要予測・発注レコメンドにはCDKを用いており、新規メンバーのキャッチアップのためのコストが高くなってしまっているので、今後改善していきたいと思っています。

ETL

AI在庫管理のバックエンドのデータベースから需要予測用にデータをETLする必要があるのですが、そのための技術スタックをご紹介します。

etl technology stack

ETLではEmbulkを通じて抽出したデータをGlueを用いて需要予測で扱いやすい形に変換し、Athena(S3)に入れています。

ワークフローの管理には、AWSが提供するマネージドAirflowサービスであるAmazon Managed Workflows for Apache Airflow(以下MWAA)を用いています。

MWAAについては、弊社のデータ基盤チームでも採用しており、AWS Startup Tech Meetup Online #5に登壇させていただいたときの資料が公開されていますので、ぜひご覧ください。

まとめ

AI在庫管理における需要予測、発注レコメンド機能で使用している技術スタックを紹介させていただきました。 データサイエンス・機械学習を活用したプロダクト開発の構成の参考になれば幸いです。