【DataRobot】需要予測モデルを活用して売上シミュレーションをしてみた

# はじめに
はじめまして。社内でデータサイエンティストを務めております@yoshie_ikenoです。

NTTデータ デザイン＆テクノロジーコンサルティング事業本部では、お客様企業のAI・データ活用を、コンサルティングから基盤構築、実行支援を通じた成果創出までワンストップで創出しており、その支援テクノロジーの一つとして DataRobot を提供しております。

今回は機械学習プラットフォーム DataRobot のWhat-if機能を利用して、需要予測モデルを活用した、将来の売上をシミュレーションする方法をご紹介します。

# DataRobotについて
DataRobot社は、人工知能（AI）に対するユニークなコラボレーション型のアプローチであるバリュー・ドリブン AIのリーダーです。

https://www.datarobot.com/jp/

DataRobot社の製品であるDataRobotは、自動機械学習（AutoML）プラットフォームであり、機械学習モデルの構築、トレーニング、評価、デプロイメントを自動化することができます。複雑なデータ分析を迅速かつ簡単に実行し、優れた予測モデルの作成をサポートすることが可能です。

# 本記事の主な想定読者
- 将来の売上のシミュレーションを行いたい方
- DataRobotのアカウントをお持ちの方
- DataRobotのWhat-if機能の使い方を知りたい方

# 需要予測モデルを活用して売上シミュレーションを行う

## 前提

### 想定する課題
今回は、ある店舗の週次の売上を予測し、マークダウン（割引率）の内容によって売上がどう変化するかをシミュレーションします。

### 利用データ
Kaggleのデータ（Retail Data Analytics）を利用します。
https://www.kaggle.com/datasets/manjeetsingh/retaildataset/data

Kaggleのデータは、1行の単位が、店舗×部門×日付になっています。
問題を簡単にするため、今回は、ある特定の１店舗、１部門に絞ったデータを作成しました。

データ項目は以下です。
・Store
・Dept
・Date
・Weekly_Sales
・IsHoliday
・Type
・Size
・Temperature
・Fuel_Price
・MarkDown1~5 …値下げに関連する匿名化された情報
・CPI
・Unemployment
・series_id　…系列ID（Store_Dept）

また、Kaggleのデータから、学習データと予測データを作成しておきます。
**学習データ**
・期間：2010/2/5～2012/8/17
**予測データ**
・期間：2010/2/5～2012/10/26
・予測期間：2012/8/24～2012/10/26　※予測期間の事前に既知の特徴量以外は空の状態

## 売上シミュレーションの流れ
大きく3つのステップで売上シミュレーションをします。
1. 週次の売上を予測する需要予測モデルを作成
2. モデルのデプロイ（運用化）
3. 売上シミュレーション

週次の売上を予測する需要予測モデルを作成し、そのモデルを活用して売上シミュレーションを行います。
今回は、DataRobotのWhat-if機能を利用し、売上シミュレーションを行うところまでの手順を中心にご紹介します。

## 1. 売上を予測するモデルを作成する
### DataRobotへのデータインポート
DataRobotにデータのインポートします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3523414/fecae120-4dbe-27ab-eca5-6264472367a2.png)
アップロードが完了するとこちらの画面になります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3567289/dbecd1e6-e773-ae1c-407c-331c6d40b0cd.png)

ここからモデルを作成するための情報をいくつか設定していきます。
今回は、過去8週間のデータを利用して、ある特定の店舗の未来1～4週間の週次の売上を予測する設定を行います。

まず、予測ターゲットとなる**Weekly_Sales**を設定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3567289/944359cd-6bed-355b-dba8-427ab8615be3.png)
時系列予測になるため、「時間認識モデルを設定」をクリックし、時間を表す特徴量を指定します。
今回は、**Date**を設定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3567289/7567d268-ba14-c141-576a-07625bc059e9.png)

下にスクロールして、どのタイプの時間認識モデルを作成するかを設定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3567289/5158b1a1-2c4a-8735-3e9d-37436ee609d2.png)
DataRobotで作成できる、時間認識モデルについては[DataRobotドキュメント](https://docs.datarobot.com/ja/docs/modeling/time/whatis-time.html)を参照ください。
今回は、「Automated Time Seriesでの予測」をクリックします。
すると、過去どのくらい前のデータを使って、どのくらい先の未来を予測するのかを設定する画面が表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3567289/5e7fdafb-333a-5d89-482d-29e9027cea43.png)
まず、特徴量の派生ウィンドウに、過去どのくらい前のデータを利用するかを設定します。
今回は8週前のデータを利用するので、画面の通り「8 to 0 週」と設定します。
DataRobotのAutomated Time Seriesを利用することで、ヒストリカル変数やラグ変数を自動で生成してくれます。

次に、予測ウィンドウに、どのくらい先の未来を予測するのかを設定します。
今回は1~4週先を予測するので、画面の通り「1 to 4 週」と設定します。
ここではデータ準備にかかる時間も考慮して、1週間先からの予測としています。

続いて、事前に分かっている情報を設定します。
DataRobotでは、天気予報や販促計画など、事前に分かっている特徴量がある場合は、事前に既知の特徴量として設定することが可能です。
今回は、「MarkDown1-5（割引情報）」、「CPI（消費者物価指数）」を設定します。

下の方にスクロールし、事前に既知として設定したい特徴量にチェックを入れ、右上の「メニュー」>「アクション」>「6個の特徴量を事前に既知として切り替える」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3567289/9d4f4b5b-e3b8-e610-2512-40651bcb2d59.png)
設定が完了すると、設定した特徴量に「事前に既知」が表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3567289/9be6f2d1-2e1f-a14c-22e2-83b25ac212a5.png)
ここまででモデル作成の事前設定は完了です！
モデル作成を始めるため、上の方にスクロールして、「開始」ボタンを押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3567289/1086bcb1-15ef-7963-12a3-e212f4e3db33.png)
少し待つとモデルが作成されるので、画面上部の「モデル」をクリックし、モデルを確認してみます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3567289/10a039ff-7677-b3b8-ea31-f8e5604e840d.png)
精度が良いものからランキング形式で作成されたモデルが並んでいます。
今回は、特別にチューニングされたDataRobot実装のモデル（Temporal Hierarchical Model with Elastic Net and XGBoost）の精度が一番高く出ています。
本来は、ここから作成されたモデルの精度や解釈性などを深堀り確認し、モデルを選択していきますが、今回は本題からそれるので、取り急ぎ一番精度の良かったモデルを選択し、次のステップの **モデルのデプロイ（運用化）** に進みます。

## 2. モデルのデプロイ（運用化）
What-if機能を利用するためにモデルのデプロイが必要になります。
モデルを選択し、「予測」>「デプロイ」>「登録してデプロイ」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3567289/a0b147fc-9628-143d-0df8-6a2abdbd6b88.png)
すると、新規モデルの登録のポップアップが出てくるので、「レジストリに追加」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3567289/4f7e6ef5-0097-94d8-8632-19bb501eb1af.png)
少しすると、「モデルレジストリ」の画面に切り替わるので、右上の「デプロイ」ボタンをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3567289/c916f0ab-d17b-a9c8-da83-5fbfb776a333.png)
今度は、「デプロイ」の画面に切り替わるので、右上の「モデルをデプロイ」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3567289/aa566468-22af-6101-3a3c-f6c615f81ea1.png)
下のポップアップが表示されるので、少し待ちます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3567289/58c467ec-84f8-a079-0b74-47674d121766.png)
デプロイが完了すると下の画面が表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3567289/81f60ce3-9dcd-bc72-bced-bd976a5dc89f.png)
以上でデプロイまでが完了です。

時系列モデルでアプリケーションを作成するために必要な、**関連付けIDの設定**を行います。
DataRobotでは、精度監視を行うために、予測データと実績（正解）データを紐づけるための関連付けIDを設定することができます。
シミュレーションをするだけなら、精度監視は関係ないですが、アプリケーションを作成するために必要なのでこちらの設定を行います。

右上の3本線をクリックし、「アクティブ化」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3567289/15b88bcb-2677-412d-7382-0146646c3a00.png)
ポップアップが表示されるので、「アクティブ化」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3567289/b762d790-7426-cbff-f144-9b8527126b84.png)
「精度」>「設定」をクリックし、関連付けIDに予測データと実績（正解）データを紐づけるIDを設定します。
今回は、**Date**を設定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3567289/78b1bbfb-6254-c4e2-02da-0688df44d1a7.png)
下にスクロールして、「保存」をクリックします。

ここまで設定が完了したら、次のステップ**売上シミュレーション**で、作成したモデルを利用して割引率を変更した場合の売上をシミュレーションを行っていきます！

## 3. 売上シミュレーション
### 売上シミュレーションのアプリケーションを作成
DataRobotのアプリケーション（What-if）機能を利用し、割引率を変更した場合の売上シミュレーションを行います。

画面上部にある「アプリケーション」を選択し、アプリケーション構築画面を表示します。
What-ifの「テンプレートを使用」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3567289/e5a6d96a-c00d-3f92-bd01-0838bd389141.png)
「What-ifアプリを作成」というポップアップが出るので、アプリの名前を設定し、「次に、デプロイを選択」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3567289/b37f6056-1aea-aff1-e340-5c6f42754e1e.png)
先ほどデプロイものを選択して、「作成」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3567289/05f7d04e-da33-ea80-8390-d21a1f859a26.png)
「DataRobotにサインイン」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3567289/b7d471b8-4294-9a74-7f77-01ed66367c54.png)
「Authorize」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3567289/dca3fa33-ed40-886a-b487-b3d0d27aaeff.png)
アプリケーションの画面に遷移しました。
右上の「構築」をクリックして、シミュレーションの設定を行います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3567289/337913f5-5f28-6c71-eb41-dae3ed0047a6.png)

割引率を変更した場合の売上をシミュレーションするため、可変特徴量に**MarkDown5**を設定します。

下にスクロールしてWhat-ifのエリアをクリックします。
すると、左側に「事前に既知の可変特徴量」を設定するエリアが出てきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3567289/ac4ba659-0209-ffbb-decb-f08c95588575.png)
「管理」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3567289/9ed68227-fdc5-6bc2-61fa-09918eaa2bf4.png)
「事前に既知の可変特徴量」に**MarkDown5**を設定し、「保存」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3567289/b1e9f405-5d56-2887-b9de-cd96241f2b39.png)
以上でシミュレーションを行うアプリケーションの設定が完了です。
右上の「パブリッシュ」をクリックして、アプリケーションを公開します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3567289/57427286-ea66-dde9-a3cd-5746f9f58e44.png)
アプリケーションを利用するため、右上の「アプリに移動」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3567289/c4907beb-5d3d-52a9-1e2c-add46f64aded.png)
作成したアプリケーションの画面が表示されました。
「データを追加」のエリアに予測データをアップロードします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3567289/a5ebf833-b53e-40ea-fb9c-8c5e741be01e.png)
下の方にスクロールしてWhat-ifを確認すると、緑の線で予測結果が表示されました。

### 売上シミュレーションを行う
これからアプリを使って、割引率（MarkDown5）の値を変更した場合の売上をシミュレーションします。

左上の「シナリオを追加」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3567289/f22e8d9f-8ac0-37e8-0cf6-cded401eb00f.png)

今回は割引率を小さくした場合と、大きくした場合の売上の変化を見ていきます。
まずは割引率を小さくした場合を想定して、左側の「日付を編集」で、8/24～9/14、MarkDown5の値は**50000**を設定し、「保存」>「シナリオを追加」をクリックし、シナリオを追加します。
続いて割引率を大きくした場合を想定して、左側の「日付を編集」で、8/24～9/14、MarkDown5の値は**100**を設定し、「保存」>「シナリオを追加」をクリックし、シナリオを追加します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3567289/3e85c94f-72eb-165b-f7c3-e1902c69875b.png)
少し待つと、シミュレーション結果が表示されました。
結果を見ると、割引率を小さくした紫のパターンは、売上が少し下がり、割引率を大きくしたオレンジのパターンでは売上が上がっていました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3567289/60db8671-5213-06c0-d251-d29763994b37.png)

# まとめ
DataRobotを活用し、週単位の売上を予測する需要予測モデルを作成し、作成したモデルを活用し、売上のシミュレーションを行いました。
需要予測モデルは、未来の売上を予測するために作成されることがほとんどですが、今回のように売上シミュレーションといった活用方法もあります。
需要予測モデルを運用されている場合は、シミュレーション用途でも活用できないか一度検討してみてはいかがでしょうか？

# 仲間募集

NTTデータ テクノロジーコンサルティング事業本部 では、以下の職種を募集しています。

<details><summary>1. クラウド技術を活用したデータ分析プラットフォームの開発・構築(ITアーキテクト/クラウドエンジニア)</summary>

クラウド／プラットフォーム技術の知見に基づき、DWH、BI、ETL領域におけるソリューション開発を推進します。
https://enterprise-aiiot.nttdata.com/recruitment/career_sp/cloud_engineer

</details>

<details><summary>2. データサイエンス領域（データサイエンティスト／データアナリスト）</summary>

データ活用／情報処理／AI／BI／統計学などの情報科学を活用し、よりデータサイエンスの観点から、データ分析プロジェクトのリーダーとしてお客様のDX／デジタルサクセスを推進します。
https://enterprise-aiiot.nttdata.com/recruitment/career_sp/datascientist

</details>

<details><summary>3.お客様のAI活用の成功を推進するAIサクセスマネージャー</summary>

DataRobotをはじめとしたAIソリューションやサービスを使って、
お客様のAIプロジェクトを成功させ、ビジネス価値を創出するための活動を実施し、
お客様内でのAI活用を拡大、NTTデータが提供するAIソリューションの利用継続を推進していただく人材を募集しています。
https://nttdata.jposting.net/u/job.phtml?job_code=804

</details>

<details><summary>4.DX／デジタルサクセスを推進するデータサイエンティスト《管理職/管理職候補》</summary>
データ分析プロジェクトのリーダとして、正確な課題の把握、適切な評価指標の設定、分析計画策定や適切な分析手法や技術の評価・選定といったデータ活用の具現化、高度化を行い分析結果の見える化・お客様の納得感醸成を行うことで、ビジネス成果・価値を出すアクションへとつなげることができるデータサイエンティスト人材を募集しています。

https://nttdata.jposting.net/u/job.phtml?job_code=898

</details>


# ソリューション紹介

<details><summary> Trusted Data Foundationについて</summary><div>

～データ資産を分析活用するための環境をオールインワンで提供するソリューション～
https://enterprise-aiiot.nttdata.com/tdf/
最新のクラウド技術を採用して弊社が独自に設計したリファレンスアーキテクチャ（Datalake+DWH+AI/BI）を顧客要件に合わせてカスタマイズして提供します。
可視化、機械学習、DeepLearningなどデータ資産を分析活用するための環境がオールインワンで用意されており、これまでとは別次元の量と質のデータを用いてアジリティ高くDX推進を実現できます。

</div></details>


<details><summary> TDFⓇ-AM（Trusted Data Foundation - Analytics Managed Service）について</summary><div>

～データ活用基盤の段階的な拡張支援（Quick Start) と保守運用のマネジメント（Analytics Managed）をご提供することでお客様のDXを成功に導く、データ活用プラットフォームサービス～
https://enterprise-aiiot.nttdata.com/service/tdf/tdf_am
TDFⓇ-AMは、データ活用をQuickに始めることができ、データ活用の成熟度に応じて段階的に環境を拡張します。プラットフォームの保守運用はNTTデータが一括で実施し、お客様は成果創出に専念することが可能です。また、日々最新のテクノロジーをキャッチアップし、常に活用しやすい環境を提供します。なお、ご要望に応じて上流のコンサルティングフェーズからAI/BIなどのデータ活用支援に至るまで、End to Endで課題解決に向けて伴走することも可能です。

</div></details>


<details><summary>NTTデータとTableauについて </summary><div>

ビジュアル分析プラットフォームのTableauと2014年にパートナー契約を締結し、自社の経営ダッシュボード基盤への採用や独自のコンピテンシーセンターの設置などの取り組みを進めてきました。さらに2019年度にはSalesforceとワンストップでのサービスを提供開始するなど、積極的にビジネスを展開しています。

これまでPartner of the Year, Japanを4年連続で受賞しており、2021年にはアジア太平洋地域で最もビジネスに貢献したパートナーとして表彰されました。
また、2020年度からは、Tableauを活用したデータ活用促進のコンサルティングや導入サービスの他、AI活用やデータマネジメント整備など、お客さまの企業全体のデータ活用民主化を成功させるためのノウハウ・方法論を体系化した「デジタルサクセス」プログラムを提供開始しています。
https://enterprise-aiiot.nttdata.com/service/tableau

</div></details>


<details><summary>NTTデータとAlteryxについて </summary><div>
Alteryxは、業務ユーザーからIT部門まで誰でも使えるセルフサービス分析プラットフォームです。

Alteryx導入の豊富な実績を持つNTTデータは、最高位にあたるAlteryx Premiumパートナーとしてお客さまをご支援します。

導入時のプロフェッショナル支援など独自メニューを整備し、特定の業種によらない多くのお客さまに、Alteryxを活用したサービスの強化・拡充を提供します。

https://enterprise-aiiot.nttdata.com/service/alteryx

</div></details>

<details><summary>NTTデータとDataRobotについて </summary><div>
DataRobotは、包括的なAIライフサイクルプラットフォームです。

NTTデータはDataRobot社と戦略的資本業務提携を行い、経験豊富なデータサイエンティストがAI・データ活用を起点にお客様のビジネスにおける価値創出をご支援します。

https://enterprise-aiiot.nttdata.com/service/datarobot

</div></details>

<details><summary> NTTデータとInformaticaについて</summary><div>

データ連携や処理方式を専門領域として10年以上取り組んできたプロ集団であるNTTデータは、データマネジメント領域でグローバルでの高い評価を得ているInformatica社とパートナーシップを結び、サービス強化を推進しています。
https://enterprise-aiiot.nttdata.com/service/informatica

</div></details>

<details><summary>NTTデータとSnowflakeについて </summary><div>
NTTデータでは、Snowflake Inc.とソリューションパートナー契約を締結し、クラウド・データプラットフォーム「Snowflake」の導入・構築、および活用支援を開始しています。

NTTデータではこれまでも、独自ノウハウに基づき、ビッグデータ・AIなど領域に係る市場競争力のあるさまざまなソリューションパートナーとともにエコシステムを形成し、お客さまのビジネス変革を導いてきました。
Snowflakeは、これら先端テクノロジーとのエコシステムの形成に強みがあり、NTTデータはこれらを組み合わせることでお客さまに最適なインテグレーションをご提供いたします。

https://enterprise-aiiot.nttdata.com/service/snowflake

</div></details>