保存料や添加物を一切使用していないお菓子をパーソナライズして届ける定期購入サービス「snaq.me」。1週間に製造するお菓子は170種類に及ぶ。AIを使った製造需要予測システムの開発裏とは。
アマゾンウェブサービスジャパンは、2018年10月29日〜11月2日の5日間、アプリケーションデベロッパーのためのテクノロジーカンファレンス「AWS Dev Day Tokyo 2018」を開催した。本稿では、2018年11月1日に行われたテクニカルセッション:Machine Learningトラックの中から、スナックミーによるセッション「パーソナライズを追求するお菓子の製造需要予測を自動化させた話」の内容について紹介する。
スナックミーは、「スナック(お菓子)×TECH」を掛け合わせたベンチャー企業として2015年に創業し、お菓子の定期購入サービス「snaq.me」を提供している。同サービスの大きな特徴は、保存料や添加物を一切使用していない150種類以上のお菓子を、ユーザーのリクエストや評価に応じた8種類にパーソナライズして、2週に1回もしくは4週に1回のペースで届けている点だ。一人一人に送るお菓子が毎回異なるため、1週間に製造するお菓子は170種類にも達する。さらに、毎週5〜10種類の新商品を加えて、随時お菓子を入れ替えているという。
snaq.meのサービスは、「お菓子の製造指示書の作成」から「製造」「在庫登録」「アサイン(顧客に届けるお菓子の選択)」「ピッキング」「発送」という流れでユーザーにお菓子を提供している。「ベンチャー企業のため、スタート当初はほとんどの工程を手作業で行っていたが、業務効率化やコスト削減を図るべく、Amazon Web Services(AWS)で自動化に着手した」と話すのは、スナックミー Co-Founder&CTO(最高技術責任者)の三好隼人氏だ。
お菓子の製造指示書の作成から発送までの流れの中で、まず自動化を進めたのが、ユーザーごとにパーソナライズしたお菓子を選択するアサインの工程だ。ここでは、「AWS Batch」を利用することで、担当者がボタン一つでジョブを起動させ、ユーザーへのアサインを一気通貫で行える仕組みを構築した。
そして、次に取り組んだのが、お菓子の製造指示書作成の自動化だ。本セッションでは、この取り組みを中心に話が進められた。
「snaq.meのお菓子は、保存料を使用していないため、賞味期限の短いものが多く、たくさんの在庫を抱えられない。また、ユーザー一人一人にパーソナライズしているため、製造計画がバラバラで、製造するお菓子の種類や数が毎週変動する。こうした中で、従来は、経験や感覚、カテゴリーなどを基に、ユーザーのニーズに適したお菓子の種類や数を予測して製造しており、製造指示書の作成に毎週1〜2日かかっていた。そこで、製造需要予測に機械学習を取り入れ、製造指示書作成の自動化と高速化を考えた」(三好氏)
製造需要予測を行うに当たっては、機械学習用のフルマネージドサービス「Amazon SageMaker」(以下、SageMaker)を導入。「配送するユーザー数の予測」と「配送したお菓子の満足度」の2点を重視して、製造需要予測の自動化を実現することで、欠品や過剰在庫のリスク、人的コストの削減を図るとともに、本格的な機械学習のための基盤構築を目指した。
SageMakerの特徴について、スナックミー データサイエンティストの鈴木一史氏は、「データサイエンスや機械学習を行うための開発環境『Amazon SageMakerノートブックインスタンス』上での作業ができる」「1メソッドでデプロイが完了する」「目的ごとのチュートリアルが豊富である」ことを挙げる。
「スタートアップやこれから機械学習を始める企業にとって、最適なサービスとなっている。私自身、機械学習を実務レベルで扱うのは今回が初めてだったが、SageMakerを活用することで約1カ月という短期間で製造需要予測の仕組みを構築できた」(鈴木氏)
SageMakerで機械学習モデルを構築し、デプロイするところまでは短期間で実現できた。一方で、本番運用に当たっては、「エンドポイントを常時起動するとコストがかさんでしまう」「バージョンアップで動かなくなる」「直近のデータも含めて再学習を自動化したい」という3つの課題が浮かび上がった。
まず、SageMakerのデプロイメソッドを使うと、エンドポイントが起動したままになり、需要予測をしないときもコストがかかるという問題があった。しかし、予測する際に手動でエンドポイントを起動するのは現実的ではない。
「そこで、予測のたびにAWS Lambda(以下、Lambda)でエンドポイントの起動、予測、削除の一連の流れを行う仕組みを構築した」(鈴木氏)
具体的には、Lambdaのコード上で、「AWS SDK(ソフトウェア開発キット) for Python(Boto3)」を使ってエンドポイントを指定して、需要予測が必要なときのみエンドポイントを起動し、予測が終わったら削除を行う。また予測についても、コード上にエンドポイントとデータを指定するだけで実行が可能となる。
「Lambdaを活用することで、SageMakerのコストを月数ドルまで抑えることができた」(鈴木氏)
2つ目の「バージョンアップで動かなくなる」という課題に対しては、「AWS Step Functions(以下、Step Functions)」を活用している。Step Functionsは、AWSのサービス実行を「ステップ」とし、一連のステップで構成するフローをGUIで定義できるものだ。
「例えば、機械学習のモデルの精度を高める際に、データの要素数を増やして新たにモデルを構築することが多々ある。しかし、検証環境のモデルをそのまま本番環境にデプロイすると、不整合が起きてエラーが起こる可能性がある。そこで、Step Functionsを使って、最新バージョンのモデルでエラーが起きた場合に、1つ前のバージョンのモデルでトライするフローを構築した」(鈴木氏)
Step Functionsによるフローの可視化と分岐処理によって、バージョンアップ時の障害発生を防止した。
3つ目の課題「直近のデータも含めて再学習を自動化したい」については、「Amazon CloudWatch Events」(以下、CloudWatch Events)を用いて、再学習を定期的に行うようにした。具体的には、再学習用のLambdaコードを用意して、CloudWatch Eventsで月次の実行スケジュールをcron形式で設定。このスケジュールに合わせて、Lambda側で前回実行したジョブを自動的に再実行する。取得元データは「Amazon S3」のファイルパスにすることで、最新データを取り込んで再学習させるようにしているという。
「SageMakerの実行および再学習の自動化に成功したことで、従来に比べて、製造需要予測にかかる作業時間を週3時間削減できた。また、短時間や週次の予測もコストを抑えて運用可能となり、ちょっとした予測をスモールスタートで始められるようになった」(鈴木氏)
SageMakerに対する今後の期待としては、鈴木氏は次のように述べた。
「データの前処理用のコードをエンドポイントに組み込む機能がないので、現在はノートブック上のコードをLambdaに外出しして対応している。ぜひ、前処理用のエンドポイント作成機能を追加してほしい(※)」(鈴木氏)
※11月時点で、モデル実行時にコードを実行する機能がアップデートで対応済み。
また今後のsnaq.meの展望について、三好氏は次のように語った。
「ユーザー一人一人にさらにパーソナライズしたお菓子を届けるために、ユーザーに今まで食べたことないお菓子を出会わせる『ディスカバリー要素』の強化を図っていく。また、ユーザー個々の機械学習や、新商品発掘ジャンルの提案、人気不人気スナックの自動選別にも取り組んでいきたい」(三好氏)
Copyright © ITmedia, Inc. All Rights Reserved.