売上予測AIによる小売業者の収益の最適化
公開: 2022-03-11予測は、履歴データとイベントを使用して、将来の傾向、潜在的な災害、およびあらゆる対象の全体的な行動に関する見積もりを作成する手法です。 予測は、意思決定分析の確率的サポートとして、経費、収益、および予算計画を見積もるために使用できます。
ビジネスにおける予測は、定性的予測と定量的予測の2つの異なるカテゴリに分類できます。
- 定性的予測。 定性的予測は市場調査と市場戦略に関係しているため、より専門家主導で人的要因の影響を受けます。 これは通常、短期的な戦略構築を目的としています。
- 定量的予測。 定量的予測では、人的要因は除外されます。 これは、エンティティが持っている履歴データのみに依存し、売上、価格、その他の財務的側面などのいくつかの要因が長期的にどのようなものになるかを予測することを目的としています。
詳細については、InvestopediaのFinancialForecasting入門書をご覧ください。
どちらのタイプの予測も、多くの可能性を示しており、多くのエンティティのビジネスを強化することができました。
予測が市場の決定にどのように影響するかについて詳しく知りたい場合は、Stefan Luckner et al。によるPredictionMarkets:Fundamentals、Designs、andApplicationsから始めることをお勧めします。
定量的予測を使用して対処できる問題の1つは、需要予測または売上予測です。
需要予測と売上予測のアプローチ
あなたが多くの店舗を運営している小売業者であり、各店舗には、季節や市場動向などの特定のイベントに基づく人間の決定に基づいた静的な製品在庫補充システムがあるとします。
場合によっては、次の2つの大きな問題につながる可能性のあるこれらの問題の1つに遭遇することがあります。
- 在庫過剰の製品。 特定の期間中に販売される予定であるが販売されていない製品の大量の在庫がある。
- 在庫切れの商品です。 商品を販売する機会がありますが、商品が入手できないために販売できません。
600世帯と小売業者を対象としたIHLGroupの調査によると、在庫切れの問題により、小売業者は年間1兆ドル近くの売り上げを失っています。
Retail Diveに電子メールで送信されたレポートによると、買い物客は3回に1回の買い物で在庫切れに遭遇します。 食品、麻薬、量販店では5回に1回、デパートや専門店では4回に1回、電気店では3回に1回、在庫切れの商品に遭遇します」とIHLGroupは発見しました。
見たところ、これらの問題は両方とも、販売確率を失ったか、売れ残った製品により多くのお金を投資したため、収益の減少につながります。つまり、コストを補うためにすぐに収益を生み出さない資産があります。
これは明らかに企業のキャッシュフローに悪影響を及ぼします。このリスクに対処するには、次の2つのことが必要です。
- 決定を下すのに役立つより多くの入力
- 在庫補充システムの長期戦略計画を立てることができる予測チーム
したがって、問題は次のとおりです。予測プロセスを支援するために、会社でAIを採用する必要がある兆候は何ですか。
この決定を行うには、次の質問に対する専門家の回答が必要です。
- 販売パイプラインを予測するのは難しいですか?
- 売上予測が不正確ですか、それとも十分に正確ではありませんか(履歴データがある場合でも)?
- 在庫切れや在庫過剰の問題に悩まされていますか?
- 意思決定と計画を推進するために、所有しているデータから記述的で推論的な洞察を抽出することはできませんか?
これらの質問への回答は、予測戦略にAIを採用するかどうかを決定するのに役立つ明確なシグナルである必要があります。
AIは売上予測プロセスにどのように役立ちますか?
AIは、多くの企業で人間の予測を上回る優れた結果を示しており、より迅速な意思決定と計画、およびより信頼性の高いリスク管理戦略を可能にしています。 これが、トップ企業が計画にAIを採用している理由です。
需要予測の問題に対処する場合、時系列予測方法を使用して各製品の売上を予測できるため、企業は在庫補充を最適化し、前述の問題の発生を最小限に抑えることができます。 ただし、多くのモデルは、必要な機能が不足しているため、個々の製品レベルまたは製品カテゴリレベルでの予測に苦労しています。 したがって、問題は、どうすればそれを機能させ、データを最大限に活用できるかということです。
実際の小売業者にとって、これらの問題は些細なことではありません。 データセットに多くの非線形性と多変量依存性を導入する1,000以上の製品があるか、それを生産または購入できるようにするために、多くの事前通知で予想される在庫補充量について警告する必要があります。需要が実現するまでに、それを取得するために必要なことは何でもしてください。
この場合、ARIMAやETSのような古典的なモデルは機能せず、RNNやXGBoostのようなより堅牢な方法が必要になるため、この問題に取り組むために多くの機能を作成する必要があります。
これを機能させるには、次のことを行う必要があります。
- 製品の多様性と多様性を説明するために必要な入力機能を取得します。
- データを分類して、各カテゴリが同じ時系列の動作になり、各カテゴリがスタンドアロンモデルを使用して対処されるようにします。
- 取得した分類された入力機能についてモデルをトレーニングします。
この記事のために、そのようなモデルの例としてXGBoostを取り上げます。
売上予測モデルに必要な機能
この問題に必要な機能のセットは、4つの主要なグループに分類されます。
- 時間関連の機能
- 販売関連の機能
- 価格関連の機能
- 株式関連の機能
時間関連の機能
ディープラーニング(リカレントニューラルネットワーク)とは異なり、機械学習モデルは、日時特徴の手動特徴抽出レイヤーを作成せずに、時系列内で長期または短期の依存関係を取得することはできません。
次のような多くの機能を日付から抽出できます。
- 年
- 日
- 時間
- 週末または平日(その日が平日か週末か)
- 曜日
多くのアプローチは、それらの時間の特徴を抽出し、それらを入力およびトレーニングモデルとして使用するだけですが、さらにエンジニアリングを行うことができます。 ご覧のとおり、機能(日、時間、曜日)は定期的です。つまり、さまざまな繰り返し値があります。 モデルはこれにどのように対処できますか?
簡単に言うと、モデルが見ているのは、00:00が23:00から23時間離れているということですが、実際には1時間離れているためです。 これを解決する1つの方法は、これらの機能を循環変換に変換することです。
サインとコサイン、またはベクトル表現の概念を使用すると、1時間(24時間)を角度に変換できます。それらのシンとコサインを使用すると、モデルが時間間の実際の比率を検出しやすくなります。周期性の。
これにより、周期的な時間特徴または周期的な特徴で発生する不連続性が削除されます。
この記事では、公開されているサンプルスーパーストアデータセットを使用して、特定の製品カテゴリの目標月間売上を予測しようとします。
また、次のライブラリでPython3.7環境を使用します。
- NumPy
- パンダ
- XGBoost
- Sklearn
次に、期間特徴変換関数を作成し、それが役に立ったかどうかをテストする方法を示します。
def convert_periodic(val,period): theta = 2*np.pi*val/period sin_period = np.sin(theta) cos_period = np.cos(theta) return sin_period,cos_period def convert_month(x): return convert_periodic(x,12) df['sin_month'], df['cos_month'] = zip(*df['month'].map(convert_month))
これで、追加された機能によってパフォーマンスが向上するかどうかをテストする準備が整いました。
X = df.drop(['Order Date','Sales','sin_month', 'cos_month'],axis = 1) y = np.log1p(df['Sales']) X_train,X_test,y_train,y_test = train_test_split(X,y,test_size = 0.2, shuffle=False)
ご覧のとおり、これは偏った機能(正規分布ではない)であるため、ターゲットの販売機能に対してlog1p変換を実行しました。

ここで、XGBoostリグレッサをデータに適合させます。
y_pred = model.predict(X_test) print(f'Loss without cyclic conversion on testing set is {sqrt(mean_squared_error(y_pred,y_test))}') Loss without cyclic conversion on testing set is 0.4313676193485837
次に、作成した機能を試してみます。
X = df.drop(['Order Date','Sales'],axis = 1) y = np.log1p(df['Sales']) X_train,X_test,y_train,y_test = train_test_split(X,y,test_size = 0.2, shuffle=False) y_pred = model.predict(X_test) print(f'Loss with cyclic conversion on testing set is {sqrt(mean_squared_error(y_pred,y_test))}') Loss with cyclic conversion on testing set is 0.33868030449130826
ご覧のとおり、損失は0.43RMSEから0.33RMSEに改善されました。
問題に応じて考えることができる他の時間関連の機能は次のとおりです。
- 商品が店舗に到着してからの月数
- 前回の販売からの日数
販売関連の機能
これは、売上を予測するために必要な主要なコア入力機能です。では、売上データを最大限に活用するにはどうすればよいでしょうか。 これは、ラグと自己相関の概念を使用して実現できます。
ラグ機能は、製品の過去の販売記録です。 たとえば、2020年5月の売上を予測するために、モデルへの入力として月間売上の12ラグ機能を使用した場合、2019年5月から2020年4月までのデータレコードをモデルに提供することを意味します。これは非常に役立ちます。
また、自己相関プロットを使用して解釈し、ターゲットフィーチャとそのラグフィーチャがどの程度相関しているかを確認できます。 これは、遅延機能の中から相関機能のみを選択するのにも役立つため、メモリ使用量と機能の冗長性を減らします。
これは、ラグ機能をデータフレームに追加する方法です。
for i in range(3): df[f'lag_{i+1}'] = df['Sales'].shift(i+1) df = df.dropna() df.head()
ここでは、トレーニングセットに含める3ラグ機能の値を選択しました。 この機能はハイパーパラメータです。自己相関プロットに基づいて選択するか、多くの値を試してチューニング段階で最適なものを選択することで選択できます。
X = df.drop(['Order Date','Sales'],axis = 1) y = np.log1p(df['Sales']) X_train,X_test,y_train,y_test = train_test_split(X,y,test_size = 0.2, shuffle=False) y_pred = model.predict(X_test) print(f'Loss with lag features on testing set is {sqrt(mean_squared_error(y_pred,y_test))}') Loss with lag and aggregated sales features on testing set is 0.2862175857169188
現在、RMSEは、ラグ機能と循環変換の両方を使用して0.28に改善されています。
追加できるいくつかの追加の販売関連機能:
- 販売されたアイテムの割合(店舗での総売上高に基づく販売されたアイテムの割合)
- アイテムのカテゴリの販売イベントの頻度
- シニアの概念を追加する
シニアは、ストア内の新しいアイテムにシニアレベルを割り当てるために導入された概念です。
- シニア0:会社にとって新しいアイテム
- シニア1:このストアでは販売されていないが、会社の他のストアで販売されているアイテム
- シニア2:以前にこのストアで販売されたアイテム
価格関連の機能
簡単な議論は、売上高の増減の直接的な原因の1つは、価格とプロモーションであるということです。 価格は、製品のさまざまなカテゴリ、サブカテゴリ、およびスーパーカテゴリを区別するための最良の方法の1つです。
たとえば、カテゴリとサブカテゴリが各製品に割り当てられていると仮定すると、次の価格機能を作成できます。
- (平均、最大、最小、中央値)カテゴリ全体の価格
- (平均、最大、最小、中央値)サブカテゴリ全体の価格
- カテゴリとサブカテゴリの両方の各統計の違いなど、これらの統計間の比較
この集計は、次のような主題ごとの多くのグループ化を使用して数回実行できます(毎月の需要を予測することを目的としていると仮定します)。
- 毎月、ストア、カテゴリ
- 毎月、ストア、サブカテゴリ
- 月次、ストア、アイテム、カテゴリ
- 月次、ストア、アイテム、サブカテゴリ
また、月次グループ化を除いて、より多くの機能を追加して、全体的な価格の振る舞いを調査することができます。
株式関連の機能
これは小売業者と販売予測者の間ではそれほど一般的ではありませんが、販売予測モデルに大きな違いがあります。 在庫データセットには、主に各店舗の毎日の各製品の在庫データが含まれています。 これから、それを売上データと組み合わせて、各製品の月間売上高比率を取得できます。 この比率は、製品の在庫が完全に販売されるまでの速さを示し、2つの主な利点があります。
- これは、モデルが現在の在庫レベルに基づいて売上を予測するのに役立ちます。
- この値を使用して、製品を低速、中速、および高速で移動する製品にクラスター化するのに役立ちます。 このクラスタリングは、意思決定とモデリングに役立ちます。
このためには、各製品の日次在庫データと販売データが必要です。次に、次のように在庫回転率を計算できます。
ヒント:これらの集計は、時間範囲に基づいて行われます。 たとえば、月間売上の予測に取り組んでいる場合、ITOは、同じ月の平均在庫値に対する先月の総売上として計算されます。
売上予測はデータを機会に変えることができます
要約すると、売上予測は、適切なデータパイプラインがあり、適切な特徴エンジニアリング手法を使用している場合、企業が収益を増やして利益を上げるのに役立ちます。 この記事は、あらゆる種類のデータがこの問題の解決に役立つ可能性があることを示すための試みでした。
すべての企業は、予測の問題にAIが必要かどうかを調査する必要があります。必要な場合は、独自の売上予測システムを作成するために、専門のAIエンジニアと機械学習エンジニアからのアドバイスが必要になります。
この売上予測手法を適用することをいとわない企業/小売業者の場合は、可能なすべてのデータ、特に毎日の売上、毎日の在庫、および毎日のトランザクションを収集することから始めます。
このデータを入手したら、それを使用して収益を増やし、在庫補充戦略を最適化できます。これにより、上記のいくつかの例で示されているように、利用可能なリソースと主要な小売業者が使用する売上予測手法を使用して、ビジネスで最大限の利益を上げることができます。 。
参照:
データセット
財務予測に関するさらなる読み物