以下、実施形態の在庫最適化システム、在庫最適化方法、およびプログラムを、図面を参照して説明する。
図1は、実施形態の在庫最適化システム10の構成図である。在庫最適化システム10は、例えば、損失推定システム100と、発注推奨システム200とを含む。発注推奨システム200は、損失推定システム100により推定された商品の売り逃しデータと、商品の販売実績データとに基づいて、商品の需要を予測し、予測した商品の需要に基づいて、商品の在庫を最適化するように、商品の発注推奨量を決定するシステムである。なお、商品には、店舗内で生産する商品と、店舗外への発注に基づいて配送される商品とがある。したがって、実施形態で使用される「発注」という言葉は、店内で生産される商品については「生産」と読み替えた方がよい場合がある。同様に、「発注推奨」を「生産推奨」、「発注推奨量」を「生産推奨量」とそれぞれ読み替えた方がよい場合がある。実施形態では、これら読み替えにより発生する説明文は省略している。
[損失推定システム]
損失推定システム100は、一以上のプロセッサにより実現される。損失推定システム100は、商品の値引き損失、廃棄損失、および、売り逃し損失を推定するシステムである。損失推定システム100は、例えば、制御部110と、記憶部140とを備える。制御部110は、例えば、在庫数計算部112と、在庫数補正部114と、値引き損失計算部116と、廃棄損失計算部118と、欠品判定部120と、売り逃し計算部122と、単品別需要金額計算部124と、カテゴリ別需要金額計算部126と、評価部128と、売り逃し補正部130と、売り逃し出力部132とを備える。これらの構成要素は、例えば、CPUなどのハードウェアプロセッサがプログラム(ソフトウェア)を実行することにより実現される。これらの構成要素のうち一部または全部は、LSI(Large-scale integrated circuit)やASIC(Application Specific integrated circuit)、FPGA(Field-Programmable gate array)、GPU(Graphics Processing Unit)などのハードウェア(回路部;circuitryを含む)によって実現されてもよいし、ソフトウェアとハードウェアの協働によって実現されてもよい。プログラムは、予めHDDやフラッシュメモリなどの記憶装置(非一過性の記憶媒体を備える記憶装置)に格納されていてもよいし、DVDやCD-ROMなどの着脱可能な記憶媒体(非一過性の記憶媒体)に格納されており、記憶媒体がドライブ装置に装着されることでインストールされてもよい。
在庫数計算部112は、商品の在庫数を計算する。在庫数計算部112は、例えば、記憶部140から読み出した理論在庫データ142に基づいて商品の在庫数を計算する。理論在庫データ142とは、在庫数の増減に関わる情報をもとに、商品の在庫数を時系列で算出したデータ、および、それと関係するデータ群である。
在庫数補正部114は、在庫数計算部112により計算された商品の在庫数が負の値である場合、商品の在庫数を正の値に補正し、補正後の商品の在庫数の計算結果を理論在庫データ142として記憶部140に保存する。在庫数補正部114は、例えば、商品の在庫数を負でない値に補正すると共に、商品について補正済みであることを示す情報を保存してもよい。在庫数補正部114は、例えば、商品の補正フラグをオフからオンに切り換えることで、商品が補正済みであることを示してもよい。
値引き損失計算部116は、商品の値引き損失を計算し、商品の値引き損失の計算結果を商品データ144として記憶部140に保存する。値引き損失計算部116は、例えば、商品の値引き販売数に対し、商品の値引き額を積算することで、商品の値引き損失を計算する。
廃棄損失計算部118は、商品の廃棄損失を計算し、商品の廃棄損失の計算結果を商品データ144として記憶部140に保存する。廃棄損失計算部118は、例えば、商品の廃棄数に対し、商品の原価を積算することで、商品の廃棄損失を計算する。
欠品判定部120は、商品の在庫数に基づいて、商品の欠品の有無を判定する。欠品判定部120は、商品の在庫数の時系列データにおいて商品の在庫数が正の値の場合は商品の欠品の判定を行わず、商品の在庫数が「0(零)」である場合には商品が欠品していると判定する。このとき、欠品判定部120は、例えば、在庫数補正部114により商品の補正フラグがオンに切り替えられている場合には、商品の欠品の判定を行わないとしてもよい。
売り逃し計算部122は、商品の売り逃し量を計算し、売り逃し量の計算結果を売り逃しデータ146として記憶部140に保存する。売り逃し量は、欠品により販売機会を逃したと考えられる商品の数量であり、売り逃し損失とはその数にその商品の一単位あたりの値入れ高を積算して算出する損失である。売り逃し計算部122は、例えば、商品の時間帯ごとの販売実績に基づいて、商品の売り逃し量を計算する。
単品別需要金額計算部124は、売り逃し計算部122により計算された商品の売り逃し量に基づいて売り逃し高を計算し、それら単品の売り逃し高をカテゴリ別に集計し、カテゴリの単品別の売上実績を加算することで、カテゴリの需要金額を計算する。
カテゴリ別需要金額計算部126は、欠品判定部120により商品が欠品していないと判定された曜日・時間帯のカテゴリ売上を基に、複数の商品を含むカテゴリの需要金額を計算する。
評価部128は、同一カテゴリに含まれる代替商品の販売による商品の販売実績への影響度合いを評価する。評価部128は、例えば、カテゴリ別需要金額計算部126により計算されたカテゴリの需要金額に対する、単品別需要金額計算部124により計算する商品の単品別の需要金額の合計値の比率が大きいほど、代替商品の影響度合いを大きく評価する。代替商品の影響度合いを大きくするとは、代替商品が多く売れていることを意味する。
売り逃し補正部130は、評価部128により評価された影響度合いに基づいて、売り逃し計算部122により計算された商品の売り逃し量を補正する。
売り逃し出力部132は、記憶部140から売り逃しデータ146を読み出し、売り逃しデータ146が示す商品の売り逃し量を外部装置に出力する。
[発注推奨システム]
発注推奨システム200は、一以上のプロセッサにより実現される。発注推奨システム200は、商品の販売実績データと商品の売り逃しデータとに基づいて商品の需要を予測する。商品の売り逃しデータとは、商品が欠品により販売機会を逃した場合に売り逃しと推定する数量および推定損失額を示すデータである。また、発注推奨システム200は、商品の売残損失と商品の売逃損失とを考慮して、商品の期待損失額が最小となるように、商品の需要予測に基づく予測販売量に対する在庫量を基準在庫量として決定する。そして、発注推奨システム200は、基準在庫量と、商品の需要予測に基づく予測在庫量との差を発注推奨量として決定する。
発注推奨システム200は、例えば、制御部210と、記憶部230とを備える。制御部210は、例えば、需要予測部212と、基準在庫計算部214と、発注推奨量計算部216と、発注推奨量出力部218とを備える。これらの構成要素は、例えば、CPUなどのハードウェアプロセッサがプログラム(ソフトウェア)を実行することにより実現される。これらの構成要素のうち一部または全部は、LSIやASIC、FPGA、GPUなどのハードウェア(回路部:circuitryを含む)によって実現されてもよいし、ソフトウェアとハードウェアの協働によって実現されてもよい。プログラムは、予めHDDやフラッシュメモリなどの記憶装置(非一過性の記憶媒体を備える記憶装置)に格納されていてもよいし、DVDやCD-ROMなどの着脱可能な記憶媒体(非一過性の記憶媒体)に格納されており、記憶媒体がドライブ装置に装着されることでインストールされてもよい。
需要予測部212は、記憶部230に格納された商品の販売実績データ232を基に需要予測モデルM1を生成し、需要予測モデルM1に予測時間帯や気象予測情報などを入力することで、商品の需要予測を行う。需要予測部212は、例えば、商品の販売時間帯ごとの販売実績データ232に基づく販売数に対し、欠品により商品の販売機会を逃した商品の販売時間帯ごとの売り逃し数を合算することで、商品の販売時間帯ごとの販売数を補正する。そして、需要予測部212は、補正された商品の販売時間帯ごとの販売数を含む学習用データを用いて学習された需要予測モデルM1に対し、予測対象の販売時間帯や気象予測情報を入力することで、商品の需要予測を行う。
需要予測部212は、例えば、補正された商品の販売時間帯ごとの販売数に基づいて、商品の販売時間帯ごとの品揃えの有無を判定し、品揃えが無いと判定した販売時間帯を除外した販売時間帯における商品の販売数を含む学習用データを用いて需要予測モデルM1を学習する。需要予測部212は、例えば、補正された商品の販売時間帯ごとの販売数が当該日の全ての時間帯で「0(零)」である場合、当該日全ての時間帯における商品の品揃えが無いものとして、商品の品揃えの判定結果を補正する。あるいは、需要予測部212は、例えば、補正された商品の販売時間帯ごとの販売数が当該日の全ての時間帯で「0(零)」である場合において、商品の販売期間が所定長さ未満である場合には、当該日全ての時間帯における商品の品揃えが無いものとして、商品の品揃えの判定結果を補正する。尚、ここで言う品揃え無しの判定は、後述する損失推定システム100の理論在庫データ142の品揃え対象判定とは別の処理である。販売期間が所定長さ未満である商品は、例えば、肉、魚、野菜、惣菜を含む。需要予測部212は、商品の需要の予測結果を、商品の販売時における気象情報およびカレンダー情報に対応付けて需要予測データ234として記憶部230に保存する。気象情報は、天気だけでなく、例えば、平均気温、降水量、日照時間等でもよい。
基準在庫計算部214は、商品の期待損失額が最小になる在庫量を基準在庫量として計算し、基準在庫量の計算結果を基準在庫データ236として記憶部230に保存する。
発注推奨量計算部216は、商品の発注推奨量を計算し、発注推奨量の計算結果を発注推奨データ238として記憶部230に保存する。発注推奨量計算部216は、例えば、発注した商品が店頭に並ぶ将来時点の商品予測在庫数を計算し、同じ将来時点における基準在庫数との差を当該将来時点で不足する数量として計算する。また、発注推奨量計算部216は、現時点で発注する商品が店頭に並ぶ時点よりも後で次回発注する商品が店頭に並ぶ時点よりも前までの予測需要数の合計を、前記不足する数量として計算した数に加算することで、商品の発注推奨量を計算する。
発注推奨量出力部218は、記憶部230から発注推奨データ238を読み出し、発注推奨データ238により示される商品の発注推奨量を外部装置に出力する。
[理論在庫の計算]
次に、理論在庫の計算処理について説明する。
在庫数計算部112は、商品の理論在庫データを計算する。在庫数計算部112は、例えば、時間帯の開始時刻から終了時刻までの在庫変動数を用いて、商品の理論在庫数を計算する。在庫変動数の評価項目は、例えば、仕入数、移動入庫数、移動出庫数、返品数、生産数、廃棄数、および、販売数を含む。仕入数は、店舗が販売業者から仕入れた商品の数を示すデータである。移動入庫数は、別の店舗から入荷した商品、および同一店舗内の別部から入荷した商品(例えば、精肉部門から惣菜部門へ入荷した商品)の数を示すデータである。移動出庫数は、別の店舗へ出荷した商品および同一店舗内の別部門へ出荷した商品(例えば、精肉部門から惣菜部門へ出荷した商品)の数を示すデータである。返品数は、店舗から販売業者および店舗から自社の物流倉庫に返品された商品の数を示すデータである。生産数は、例えば惣菜など、店舗内で生産した商品の数を示すデータである。廃棄数は、店舗が廃棄した商品の数を示すデータである。販売数は、店舗が販売した商品の数を示すデータである。
在庫数計算部112は、原価法で評価する商品と売価還元法で評価する商品とで商品の理論在庫データの計算方法を変更する。原価法で評価する商品とは、商品の販売期間が比較的短く、棚卸を考慮しない商品である。売価還元法で評価する商品とは、商品の販売期間が比較的長く、棚卸を実施する商品である。
図2に示すように、在庫数計算部112は、原価法で評価する商品の理論在庫データを計算する場合には、まず、現在時点よりも過去の時点である時間帯t1を計算開始時点とし、時間帯t1の開始時刻の理論在庫数を「0(零)」とする。これは、原価法で評価する商品は、ある時点の在庫量を算出したり管理したりすることが困難なためである。そして、在庫数計算部112は、時間帯t1の開始時刻の理論在庫数に対し、時間帯t1の在庫変動数を加算することで、時間帯t1の終了時刻の理論在庫数「X1」を計算する。ここで、在庫変動数は、マイナスの値であることもある。また、在庫数計算部112は、時間帯t1の終了時刻の理論在庫数「X1」を、時間帯t2の開始時刻の理論在庫数として適用する。そして以降、在庫数計算部112は、現在時点である時間帯t6を計算終了時点とし、時間帯t1から時間帯t6まで理論在庫数を順次計算する。
図3に示すように、在庫数計算部112は、売価還元法で評価する商品の理論在庫データを計算する場合、まず、棚卸タイミングである時間帯t4の終了時刻の理論在庫数「Y」を計算する。また、在庫数計算部112は、時間帯t4の終了時刻の理論在庫数「Y」に対し、時間帯t4の在庫変動数を減算することで、時間帯t4の開始時刻の理論在庫数「Y1」を計算する。また、在庫数計算部112は、時間帯t4の開始時刻の理論在庫数「Y1」を、時間帯t3の終了時刻の理論在庫数「Y1」として適用する。そして以降、在庫数計算部112は、棚卸タイミング以前の時間帯において、時間帯t1を計算開始時点とし、時間帯t4から時間帯t1まで理論在庫数を順次計算する。また、在庫数計算部112は、時間帯t4の終了時刻の理論在庫数「Y」を、時間帯t5の開始時刻の理論在庫数に適用する。そして、在庫数計算部112は、時間帯t5の開始時刻の理論在庫数「Y」に対し、時間帯t5の在庫変動数を加算することで、時間帯t5の終了時刻の理論在庫数「Y5」を計算する。また、在庫数計算部112は、時間帯t5の終了時刻の理論在庫数「Y5」を、時間帯t6の開始時刻の理論在庫数「Y5」として適用する。そして以降、在庫数計算部112は、棚卸タイミング以降の時間帯において、現在時点である時間帯t6を計算終了時点とし、時間帯t5から時間帯t6までの理論在庫数を順次計算する。
在庫数補正部114は、商品の理論在庫数が何らかのデータに起因して不整合を起こして負の値となった場合、商品の理論在庫数を補正して補正理論在庫数として算出する。補正理論在庫数は、例えば、正の値である。在庫数補正部114が商品の補正理論在庫数を算出した場合、その商品は欠品判定の対象から除外される。これにより、商品が欠品していると誤って判定されることが抑制される。
[補正理論在庫数の計算]
次に、商品の補正理論在庫数の計算処理について説明する。
在庫数補正部114は、在庫数計算部112により計算された在庫数の時系列データを補正する場合、在庫数の時系列データに対し、補正対象期間を定めて当該期間の時間軸を遡るように在庫数の時系列データを順に補正する。
在庫数補正部114は、補正対象の在庫数が負の値である場合、正の値(例えば、「1」)に補正する。在庫数補正部114は、補正対象の在庫数が「0(零)」である場合、一つ前の時刻の在庫数の補正を行った場合には、在庫数を正の値(例えば、「1」)に補正し、一つ前の時刻の在庫数の補正を行っていない場合には、在庫数を補正しない。在庫数補正部114は、補正対象の在庫数が正の値である場合、在庫数を補正しない。
図4は、商品の理論在庫数が補正される前後の時系列データを示すグラフである。在庫数補正部114は、例えば、商品の損失推定の期間ごとに、理論在庫数の時系列データを補正することで、補正理論在庫数の時系列データを計算する。理論在庫数の時系列データは、例えば、店舗が対象商品を初回に入荷した時点から一定の時間間隔で計算された理論在庫数を含むデータである。図示の例では、商品の損失推定の期間は、時間帯t1から時間帯t10までの期間である。
在庫数補正部114は、理論在庫数の時系列データを補正する場合には、まず、商品の損失推定の期間に含まれる理論在庫数のデータの中から、理論在庫数が負の値となるデータを探索する。在庫数補正部114は、例えば、商品の損失推定の期間に含まれる最終時点を計算開始時点とし、その時点から時間軸を遡りながら、理論在庫数が負の値となるデータを探索する。図示の例では、在庫数補正部114は、時間帯t10の終了時刻の理論在庫数のデータを負の値となるデータとして探索する。
在庫数補正部114は、次に計算対象となる理論在庫数を補正する。図示の例では、在庫数補正部114は、時間帯t10の終了時刻の理論在庫数から時間軸を遡って、時間帯t10の開始時刻の理論在庫数を次の計算対象とする。そして、在庫数補正部114は、時間帯t10の終了時刻の理論在庫数のデータに続いて、時間帯t10の開始時刻の理論在庫数のデータを負の値となるデータとして探索する。
在庫数補正部114は、例えば、ある時間帯の理論在庫数が時間軸に遡って補正されている場合、その時間帯の開始時刻の理論在庫数を、次に計算対象となる時間帯(時間軸を遡った直前の時間帯)の終了時刻の理論在庫数として適用する。図示の例では、在庫数補正部114は、時間帯t10の開始時刻の理論在庫数を補正しているため、その理論在庫数を、次に計算対象となる時間帯t9の終了時刻の理論在庫数として適用する。
在庫数補正部114は、ある時間帯の終了時刻の理論在庫数を補正している場合において、その時間帯の開始時刻の理論在庫数が「0(零)」である場合、その時間帯の開始時刻の理論在庫数の補正を行い、ある時間帯の終了時刻の理論在庫数を補正していない場合において、その時間帯の開始時刻の理論在庫数が「0(零)」である場合、その時間帯の開始時刻の理論在庫数の補正を行わない。図示の例では、在庫数補正部114は、時間帯t4の終了時刻の理論在庫数を補正し、かつ、時間帯t4の開始時刻の理論在庫数が「0(零)」であるため、時間帯t4の開始時刻の理論在庫数を補正する。また、在庫数補正部114は、時間帯t2の終了時刻の理論在庫数を補正せず、かつ、時間帯t2の開始時刻の理論在庫数が「0(零)」であるため、時間帯t2の開始時刻の理論在庫数を補正しない。
図5は、商品の損失推定の期間ごとの補正理論在庫数の計算処理を説明するための図である。図示の例では、在庫数計算部112は、所定期間ごとに時間軸を順方向に沿って在庫計算している。図5では、在庫数計算部112が最初の所定期間に含まれる在庫数の時系列データの初期値を「0(零)」として計算する。そして、在庫数補正部114は、損失推定期間単位で時間軸に沿って補正計算を行う。在庫数補正部114は、各損失推定期間の中で、前述のとおり、時間軸を遡るように補正計算を行う。在庫数補正部114は、第1損失推定期間の理論在庫数が負の値を含むため、これらの値を正の値に補正する。これにより、在庫数計算部112は、第2損失推定期間における理論在庫数の初期値を正の値として在庫計算する。また、在庫数補正部114は、第2損失推定期間における理論在庫数の時系列データが負の値を含むため、これらの値を正の値に補正する。在庫数補正部114は、第3損失推定期間の理論在庫数が負の値を含まないため、理論在庫数の補正を行わない。
[売り逃しの計算]
次に、商品の売り逃しの計算処理について説明する。
まず、図6に示すように、値引き損失計算部116は、購入履歴データ150と、値引き履歴データ152とに基づいて、値引き集計データ154を作成する。
値引き履歴データ152は、値引きされた商品の販売履歴に関するデータである。値引き履歴データ152は、値引き損失計算部116が購入履歴データ150から事前に作成するデータであり、購入履歴データ150の売上コードまたは売上コード名から値引きとなるレコードを抽出することで作成する。値引き履歴データ152のデータ項目は、例えば、店舗コード、商品コード、取引日時、値引き販売数、および、値引き金額である。値引き販売数は、値引きされた商品が販売された数量に関するデータである。値引き金額は、商品が値引きされた金額に関するデータである。
値引き集計データ154は、例えば一時間単位を最小のレコードとした、値引きされた商品の販売履歴の時間帯ごとの集計データである。値引き集計データ154のデータ項目は、例えば、店舗コード、商品コード、日付・時間帯の開始時刻、日付・時間帯の終了時刻、値引き販売数、値引き金額を含む。値引き販売数は、値引きされた商品の販売数の時間帯ごとの合計値を示すデータである。値引き金額は、商品の値引き金額の時間帯ごとの合計値を示すデータである。
値引き損失計算部116は、値引き履歴データ152を参照し、店舗コード、商品コード、日付・時間帯の開始時刻、日付・時間帯の終了時刻をキーとして、購入履歴データ150に含まれる商品の値引き販売数および商品の値引き金額を、店舗、商品、日付・時間帯の別に集計することで、値引き集計データ154を作成する。
次に、図7に示すように、廃棄損失計算部118は、廃棄履歴データ156に基づいて、廃棄集計データ158を作成する。
廃棄履歴データ156は、商品の廃棄履歴に関するデータである。廃棄履歴データ156のデータ項目は、例えば、店舗コード、商品コード、廃棄日時、廃棄数量、および、廃棄金額を含む。店舗コードは、商品が廃棄された店舗の識別データである。ここで、廃棄金額とは、例えば、廃棄した商品の原価とする。
廃棄集計データ158は、例えば一時間単位を最小レコードとした、商品の廃棄履歴の時間帯ごとの集計データである。廃棄集計データ158のデータ項目は、例えば、店舗コード、商品コード、日付・時間帯の開始時刻、日付・時間帯の終了時刻、廃棄数量、廃棄金額を含む。廃棄金額は、廃棄された商品の廃棄金額の時間帯ごとの合計値を示すデータである。
廃棄損失計算部118は、廃棄履歴データ156を参照し、店舗コード、商品コード、日付・時間帯の開始時刻、日付・時間帯の終了時刻をキーとして、廃棄履歴データ156に含まれる商品の廃棄金額を、店舗、商品、日付・時間帯の別に集計することで、廃棄集計データ158を作成する。
次に、図8に示すように、売り逃し計算部122は、理論在庫データ142と売逃算出カテゴリマスタ160とを結合することで単品別理論在庫データ162を作成する。
理論在庫データ142は、店舗に存在する各商品の在庫数を例えば一時間単位を最小レコードとしたデータである。理論在庫データ142のデータ項目は、例えば、部門コード、小分類コード、店舗コード、商品コード、日付・時間帯の開始時刻、日付・時間帯の終了時刻、開始時刻の理論在庫数、終了時刻の理論在庫数、品揃え対象判定、および、欠品フラグを含む。なお、図示は省略したが、理論在庫データ142のデータ項目は、さらに、品切れ時間、売単価、原単価、値入れ単価を含む。ここで、理論在庫数は、在庫数補正部114の処理結果を使うとよい。部門コードは、商品の属する部門の種別を示す識別データである。小分類コードは、商品の下位層の分類である小分類の種別を示す識別データである。店舗コードは、商品が置かれた店舗を示す識別データである。商品コードは、商品の種別を示す識別データである。日付・時間帯の開始時刻は、各レコードの開始時刻を示すデータである。日付・時間帯の終了時刻は、各レコードの終了時刻を示すデータである。開始時刻の理論在庫数は、開始時刻に店舗に存在する商品の在庫数を示すデータである。終了時刻の理論在庫数は、終了時刻に店舗に存在する商品の在庫数を示すデータである。品揃え対象判定は、商品が店舗在庫として揃っているか(店舗で販売できる在庫となっているか)否かについて示すデータであり、例えば、一週間以上の長期欠品状態が続いている場合に、商品が品揃えの対象外であると判定される。品揃え対象判定は、商品が品揃えの対象外である場合に「0」が付与され、商品が品揃えの対象である場合に「1」が付与される。品揃え対象判定として「0」が付与されているデータについては、商品の売り逃しの算出には用いない。欠品フラグは、商品が欠品しているかについて示すデータであり、例えば、商品の理論在庫が「0(零)」になった場合に、商品が欠品したと判定される。欠品フラグは、商品が欠品していない場合に「0」が付与され、商品が欠品している場合に「1」が付与される。品切れ時間は、商品が欠品している時間の長さを示すデータである。売単価は、商品の販売価格を示すデータである。原単価は、商品の原価を示すデータである。値入れ単価は、商品の販売価格と原価との差額を示すデータである。
売逃算出カテゴリマスタ160は、カテゴリ別の売り逃しを算出する際に必要となる商品に関する情報を定義するデータである。売逃算出カテゴリマスタ160のデータ項目は、例えば、部門コード、小分類コード、算出粒度、および、算出カテゴリを含む。部門コードは、商品の属する部門の種別を示す識別データである。小分類コードは、商品の下位層の分類である小分類の種別を示す識別データである。算出粒度は、商品のカテゴリが「商品指名購入」または「カテゴリ購入」のいずれに該当するかを定義している。「商品指名購入」は、店舗で顧客が購入する場合にその商品を指名して購入する代替不可能な商品を意味する。「カテゴリ指名購入」は、店舗で顧客が購入する場合において欠品の場合に代替品を購入する代替可能な商品を意味する。算出カテゴリは、各商品の小分類コードを売逃算出用のカテゴリ名称として付与したものである。
単品別理論在庫データ162は、例えば一時間単位を最小レコードとした商品単品のデータである。売り逃し計算部122は、部門コードおよび小分類コードをキーとして、理論在庫データ142および売逃算出カテゴリマスタ160を結合することで、単品別理論在庫データ162を作成する。単品別理論在庫データ162のデータ項目は、例えば、部門コード、小分類コード、店舗コード、商品コード、日付・時間帯の開始時刻、日付・時間帯の終了時刻、開始時刻の理論在庫数、終了時刻の理論在庫数、品揃え対象判定、欠品フラグ、算出粒度、算出カテゴリを含む。なお、図示は省略したが、単品別理論在庫データ162のデータ項目は、さらに、品切れ時間、売単価、原単価、値入れ単価を含む。
次に、図9に示すように、売り逃し計算部122は、単品別理論在庫データ162に基づいて、カテゴリ別理論在庫データ164を作成する。カテゴリ別理論在庫データ164は、一時間単位を最小レコードとし、算出カテゴリ、算出粒度をキーとしてグループ化した商品カテゴリのデータである。図示の例では、売り逃し計算部122は、指定した時間帯が「2018/10/1 12時」から「2018/10/1 13時」までの範囲で、算出粒度が「カテゴリ購入」であり、かつ、算出カテゴリが「CS1」であるデータをグループ化することで、カテゴリ別理論在庫データ164を作成している。
次に、図10に示すように、売り逃し計算部122は、購入履歴データ150に基づいて、購入客数データ166を作成する。購入履歴データ150は、例えば一時間単位を最小レコードとした商品単品のデータである。
購入履歴データ150は、商品の購入日時の他、商品の購入時における返品処理および訂正処理の有無に関するデータである。購入履歴データ150は、例えば、各店舗に設置されたPOS(Point of sale)レジスターなどから取得した商品の売上データに基づいて作成される。購入履歴データ150のデータ項目は、例えば、店舗コード、商品コード、売上コード、売上コード名、売上数量、売上金額、売単価、原単価、取引日時、POS番号、取引番号、返品フラグ、訂正フラグを含む。店舗コードは、商品が購入された店舗を示す識別データである。商品コードは、購入された商品を示す識別データである。売上コードは、POSレジスターを通じて行われた取引の種別を示す識別データである。売単価は、商品の一つ当たりの販売価格を示すデータである。原単価は、商品の一つ当たりの原価を示すデータである。取引日時は、例えば、商品の購入、商品の返品、商品の購入データの訂正など、POSレジスターを通じて取引が行われた日時に関するデータである。POS番号は、POSレジスターの識別データである。取引番号は、POSレジスターを通じた取引が行われるごとに付与される取引に関する識別データである。返品フラグは、商品の返品の有無を示すデータであり、初期値は「0」であり、商品の返品処理が行われた場合に「1」に切り替わる。訂正フラグは、商品の購入履歴の訂正処理の有無を示すデータであり、初期値は「0」であり、商品の購入履歴の訂正処理が行われた場合に「1」に切り替わる。
購入客数データ166は、例えば一時間単位を最小レコードとした時間帯ごとの購入客数のデータである。購入客数データ166のデータ項目は、例えば、店舗コード、日付・時間帯の開始時刻、日付・時間帯の終了時刻、販売客数、返品客数、訂正客数、および、購入客数を含む。販売客数は、POSレジスターを通じて商品の会計を行った顧客の人数を示すデータであり、購入履歴データ150における取引番号のデータレコード数に相当する。返品客数は、商品を返品した顧客の人数を示すデータであり、購入履歴データ150において返品フラグが「1」であるデータレコード数に相当する。訂正客数は、商品の購入時に、店員に対して商品の購入履歴の訂正処理を依頼した顧客の人数を示すデータであり、購入履歴データ150において訂正フラグが「1」であるデータレコード数に相当する。購入客数は、時間帯ごとの商品を購入した顧客の人数を示すデータであり、販売客数から訂正客数を差し引いた人数に相当する。すなわち、商品の購入履歴の訂正処理では、一旦、取引の履歴を取り消し、商品の売り上げを再計上する。この場合、商品の売り上げの計上と、商品の売り上げの再計上を区別することができないため、商品の購入履歴の訂正処理が行われると、取引番号のデータレコード数が購入客数に比して多くなる。そのため、販売客数から訂正客数を差し引くことで購入客数が算出される。なお、返品処理については、返品の対象となる元の取引で客数をカウントしているので、返品件数を差し引かない。
次に、図11に示すように、売り逃し計算部122は、単品別理論在庫データ162、
カテゴリ別理論在庫データ164、購入履歴データ150、購入客数データ166、および曜日祝日マスタデータ168を結合することで、売り逃し数算出用データ170を作成する。曜日祝日マスタデータ168は、日付ごとの曜日および祝祭日を定義するためのデータである。曜日祝日マスタデータ168のデータ項目は、例えば、日付、祝祭日、曜日、および、平日休日を含む。日付は、定義の対象となる日付に関するデータである。祝祭日は、定義の対象となる日付が祝祭日に該当するか否かを示すデータである。曜日は、定義の対象となる日付の曜日を示すデータである。平日休日は、定義の対象となる日付が「平日」または「休日」のいずれに区分されるかを示すデータである。この場合、「平日」は、定義の対象となる日付が、祝祭日ではなく、かつ、月曜日から金曜日までの間である場合に付与される。また、「休日」は、定義の対象となる日付が祝祭日である場合、または、定義の対象となる曜日が土曜日または日曜日である場合に付与される。
売り逃し数算出用データ170は、例えば一時間単位を最小レコードとした、売り逃し数の算出に用いられる情報を定義するデータである。売り逃し数算出用データ170のデータ項目は、例えば、部門コード、小分類コード、店舗コード、商品コード、日付・時間帯の開始時刻、日付・時間帯の終了時刻、品揃え対象判定、欠品フラグ、算出粒度、算出カテゴリ、曜日、平日休日、購入客数、販売数、および販売金額を含む。購入客数は、[0060]の中で記載した購入客数データ166と同一のデータである。販売数は、日付・時間帯の開始時刻から日付・時間帯の終了時刻までの一時間における商品の販売数を示すデータである。販売数は、例えば、単品別理論在庫データ162とカテゴリ別理論在庫データ164を結合したデータに含まれる商品の売上数量に基づいて取得される。
売り逃し計算部122は、店舗コードをキーとして、単品別理論在庫データ162、曜日祝日マスタデータ168、購入客数データ166、および、購入履歴データ150の各々のレコードを結合することで、売り逃し数算出用データ170を作成する。
次に、売り逃し計算部122は、売り逃し数算出用データ170を参照して、想定購入率および単品別売り逃し数を算出する。想定購入率は、商品と時間帯との組み合わせに対して計算され、顧客が店舗を訪れた際に商品を購入する確率である。想定購入率は、例えば、商品の時間帯(一時間単位)ごとの販売数を、同一の時間帯に店舗で商品を会計した顧客の人数である購入客数で除算することで算出される。ここで、同一の時間帯は、例えば、曜日と時間帯との組み合わせで定義される。すなわち、同曜日・同時間帯を同一の時間帯とする。単品別売り逃し数は、商品の時間帯ごとの売り逃し数である。単品別売り逃し数も、商品と時間帯との組み合わせに対して計算されるが、特に欠品が存在した時間帯について計算される。単品別売り逃し数は、購入率ベースでの単品別売り逃し数であり、例えば、購入客数と、想定購入率と、欠品時間割合とを積算することで算出される。欠品時間割合は、欠品が存在した時間帯において商品の在庫数が「0(零)」となっており、商品が欠品していた時間の割合を示す。
売り逃し計算部122は、想定購入率の計算において、欠品なしの同曜日・同時間帯が必要なサンプル数が存在しない場合には、以下の優先順序に従って、売り逃し数算出用データ170からデータを抽出する条件を段階的に緩めてデータを補完する。
優先度1:同曜日・同時間帯で欠品なし。
優先度2:曜日区分(平日/休日)が同じ・同時間帯で欠品なし。
優先度3:曜日に関わらず・同時間帯で欠品なし。
優先度4:同曜日・同時間帯で欠品ありも含む。
優先度5:曜日区分(平日/休日)が同じ・同時間帯で欠品ありも含む。
優先度6:曜日に関わらず・同時間帯で欠品ありも含む。
売り逃し計算部122は、商品が欠品していた時間帯が存在する場合、商品が欠品していた時間帯の売り逃し量を、商品が欠品していなかった時間帯の販売実績を用いて推定する。売り逃し計算部122は、商品が欠品していた時間帯の売り逃し量を、商品が欠品していなかった時間帯の販売実績を用いて推定する場合、商品が欠品していた時間帯に近い時間帯の商品の販売実績を優先して用いる。また、売り逃し計算部122は、商品が欠品していた時間帯の売り逃し量を、商品が欠品していなかった時間帯の販売実績を用いて推定する場合、商品が欠品していた時間帯よりも後の時間帯の商品の販売実績に比して、商品が欠品していた時間帯よりも前の時間帯の商品の販売実績を優先して用いる。
図12は、商品の欠品の有無に応じて区分した売り逃し数算出用データ170の一例を示す図である。図示の例では、欠品ありの時間帯のみの売り逃し数算出用データ170を「テーブルA」として示す。また、図示の例では、欠品なしの時間帯のみの売り逃し数算出用データ170を「テーブルB」として示す。
図13に示すように、売り逃し計算部122は、品揃えの対象である商品が欠品している時間帯の売り逃し量を、品揃えの対象である商品が欠品していない時間帯のデータを用いて推定する場合、売り逃し量推定用データ172を参照する。売り逃し量推定用データ172は、「テーブルA」と「テーブルB」とを、店舗コード、商品コード、時間帯、および、曜日をキーとして関連付けたデータである。売り逃し量推定用データ172のデータ項目は、「テーブルA」から抽出したデータ項目と、「テーブルB」から抽出したデータ項目と、「演算データ」としてのデータ項目とを含む。「テーブルA」から抽出したデータ項目は、例えば、店舗コード、商品コード、日付、時間帯、曜日、および、販売客数を含む。「テーブルB」から抽出したデータ項目は、例えば、参照日付、参照客数、および、参照販売数を含む。参照日付は、「テーブルB」における日付に相当するデータである。参照客数は、「テーブルB」における販売客数に相当するデータである。参照販売数は、「テーブルB」における販売数に相当するデータである。「演算データ」としてのデータ項目は、例えば、日付差異、ランク算出用日付差異、および、日付差異ランクを含む。日付差異は、日付から参照日付を差し引いた日数の値を示すデータである。ランク算出用日付差異は、日付差異ランクを算出する際の基準となるパラメータである。ランク算出用日付差異は、例えば、日付差異が正の値である場合には日付差異の値が付与され、日付差異が負の値である場合には日付差異の絶対値に所定値(この例では、「56」)を加算した値が付与されている。すなわち、実施形態では、参照日付が日付よりも前の時点である場合には、参照日付が日付よりも後の時点である場合よりも優先して用いる。つまり、日付差異がマイナス(欠品時刻よりも未来の日付のデータを利用)の場合、日付差異が過去の日付差異よりも大きくなるようにすることで過去の日付のデータの優先度を高くする。なお、日付差異がマイナスの場合、日付差異が過去データより大きくなるようにするために加算する56日という数は、欠品日から±8週目(つまり±56日目)までのデータを利用する場合の例であり、過去データの優先度を高めるために56日を加算するようにしている。すなわち、あまりにかけ離れた期間の売れ行きデータ(購入率ベース、客単価ベース)を利用しても推定結果の信憑性に欠けるため、利用するデータは直近8週間(欠品時点から過去・未来ともに)としている。±8週目については特に制限は設けないが、信憑性に欠けない週数とする必要がある。日付差異ランクは、想定購入率および単品別売り逃し数を算出する際の売り逃し量推定用データ172の各レコードの優先度を規定するデータである。この例では、売り逃し計算部122は、日付差異ランクが「4」以下のデータを抽出しており、これら抽出したデータを集計して用いることで、商品が欠品している時間帯に対応する想定購入率および単品別売り逃し数を算出する。
次に、単品別需要金額計算部124は、想定購入率に対して購入客数を積算することで、購入率ベースの想定販売数を算出する。また、単品別需要金額計算部124は、購入率ベースの想定販売数に対して欠品時間割合を積算することで、購入率ベースの売り逃し数を算出する。また、単品別需要金額計算部124は、購入率ベースの売り逃し数に対して商品の売単価を積算することで、購入率ベースの売り逃し高を算出する。そして、単品別需要金額計算部124は、カテゴリに属する複数の商品について、購入率ベースの売り逃し高の合計値と、商品の売上金額の合計値とを足し合わせた金額を単品別需要金額合計としてカテゴリ別売り逃し高(客単価ベース)を算出する。
カテゴリ別需要金額計算部126は、想定客単価に対して購入客数を積算することで、客単価ベースの想定売上金額を算出する。客単価は、例えば、商品の売上金額を購入客数で除算することで算出される。また、カテゴリ別需要金額計算部126は、客単価ベースの想定売上金額が売上金額よりも大きい場合、客単価ベースの想定売上金額から売上金額を差し引いた金額を客単価ベースの想定売上金額としてカテゴリ別売り逃し高(客単価ベース)を算出する。一方、カテゴリ別需要金額計算部126は、客単価ベースの想定売上金額が売上金額以下である場合、客単価ベースの想定売上金額を「0(零)」としてカテゴリ別売り逃し高(客単価ベース)を算出する。
カテゴリ別需要金額計算部126は、客単価ベースの想定売上金額に対して欠品時間割合を積算することで、客単価ベースの売り逃し高を算出する。そして、カテゴリ別需要金額計算部126は、カテゴリに属する複数の商品について、客単価ベースの売り逃し高の合計値と、商品の売上金額の合計値とを足し合わせた金額をカテゴリ別需要金額合計として算出する。
評価部128は、単品別需要金額計算部124により計算された単品別需要金額合計と、カテゴリ別需要金額計算部126により計算されたカテゴリ別需要金額合計とに基づいて、単品別売り逃し金額を補正する。図14に示す例では、評価部128は、欠品期間のカテゴリ売上CAS(Category Actual sales)に対して欠品期間における単品別売り逃し金額CLS(Category Lost Sales)を加算した欠品期間カテゴリ売上が欠品していない同曜日・同時間帯のカテゴリ売上から推定した欠品期間カテゴリ需要CD(Category Demand)の金額を超過している場合、超過分を抑制するように、欠品期間における単品別売り逃し金額CLSを圧縮補正する。評価部128は、例えば、補正前の欠品期間における単品別売り逃し金額CLSに対して補正係数(CD/(CAS+CLS))を掛けることで、補正後の欠品期間における単品別売り逃し金額CLSを算出する。評価部128は、算出粒度として「カテゴリ購入」が付与された商品を対象として、代替商品購入の影響を考慮して、欠品期間における単品別売り逃し金額CLSを圧縮補正する。なお、評価部128により圧縮補正された単品別売り逃し金額CLSは、需要予測部212による商品の需要予測に用いてもよいし、用いなくてもよい。
[商品の需要予測の前処理]
次に、商品の需要予測の前処理について説明する。
図15に示すように、需要予測部212は、まず、商品の販売時刻ごとに記録された販売数を販売時間帯ごとに集計して、販売時間帯ごとの販売数を算出する。販売時間帯は、例えば、一時間単位でもよいし、一日単位でもよいし、一週間単位でもよい。需要予測部212は、例えば、商品コードが共通する商品の販売数を販売時間帯ごとに集計して、商品の販売時間帯ごとの販売数を算出する。
次に、図16に示すように、需要予測部212は、商品の販売時間帯ごとの販売数に対し、商品の販売時間帯ごとの売り逃し数を合算することで、商品の販売時間帯ごとの販売数を補正する。
需要予測部212は、補正された商品の販売時間帯ごとの販売数を含む学習用データを用いて機械学習により需要予測モデルを学習させる。機械学習の手法は、例えば、重回帰分析、ランダムフォレスト、サポートベクターマシンを含む。需要予測部212は、需要予測モデルを学習する場合、補正された販売数が「0(零)」である販売時間帯のデータを学習用データとして用いてもよいし、用いなくてもよい。
需要予測部212は、需要予測モデルを学習する場合、商品の販売時刻ごとに記録された販売数を所定期間ごとに集計して、所定期間ごとの販売数を算出する。所定期間は、上述した販売時間帯の長さよりも長い期間である。例えば、販売時間帯が一時間単位である場合には所定期間は一日単位であり、販売時間帯が一日単位である場合には所定期間は一週間単位である。需要予測部212は、ある所定期間における販売数が「0(零)」である場合、所定期間に含まれる販売時刻ごとの販売数を学習用データとして用いない。
より詳細には、図17に示すように、需要予測部212は、記憶部230に格納された商品の販売実績のデータ量がシステムの利用者が定める基準値と比較して少ない場合には、商品群ごとの商品の販売実績を学習用データとして用いた機械学習により、需要予測モデルM1の一例として商品群別機械学習モデルを学習させる。商品群別機械学習モデルは、商品群ごとの商品の販売実績を学習用データとして用いて機械学習により学習させたモデルである。図示の例では、商品群ごとの商品の販売実績のデータ項目として、大分類、中分類、小分類、商品コード、天気、日付、曜日、時間帯、売価、販売数を含む。大分類、中分類、小分類は、商品の分類を階層別に示すデータ項目であり、商品群に含まれる商品の絞り込みに用いられる。天気、日付、曜日、時間帯、売価は、需要予測モデルへの入力に用いられるデータ項目であり、学習用データとして用いられる。販売数は、需要予測モデルM1から出力されるデータ項目であり、教師データとして用いられる。
需要予測部212は、記憶部230に格納された商品の販売実績のデータ量がシステムの利用者が定める基準値と比較して多い場合には、商品ごとの商品の販売実績を学習用データとして用いた機械学習により、需要予測モデルの一例として商品別機械学習モデルを学習させる。商品別機械学習モデルは、商品ごとの商品の販売実績を学習用データとして用いて機械学習により学習させたモデルである。図示の例では、商品ごとの販売実績のデータ項目として、商品コード、天気、日付、曜日、時間帯、売価、販売数を含む。天気、日付、曜日、時間帯、売価は、需要予測モデルへの入力に用いられるデータ項目であり、学習用データとして用いられる。販売数は、需要予測モデルから出力されるデータ項目であり、教師データとして用いられる。
[商品の需要予測]
次に、商品の需要予測の第1実施例について説明する。
需要予測部212は、補正された商品の販売時間帯ごとの販売数を含む学習用データを用いて学習された需要予測モデルM1に対し、予測対象の販売時間帯を入力することで、商品の需要予測を行う。
需要予測部212は、商品の需要予測を行う場合、記憶部230に格納された販売実績データ232のデータ量に応じて需要予測モデルM1を変更する。需要予測部212は、例えば、記憶部230に格納された販売実績データ232のデータ量が多くなるにつれて、予測精度の高い需要予測モデルM1を用いて商品の需要予測を行う。需要予測部212は、例えば、記憶部230に格納された販売実績データ232のデータ量がシステムの利用者が定める基準値と比較して少ない場合には、複数の商品を含む商品群ごとの需要予測モデルM1を用いて商品の需要予測を行い、記憶部230に格納された販売実績データ232のデータ量がシステムの利用者が定める基準値と比較して多い場合には、商品ごとの需要予測モデルM1を用いて商品の需要予測を行う。また、需要予測部212は、例えば、記憶部230に格納された販売実績データ232のデータ量がシステムの利用者が定める基準値と比較して少ない場合には、商品の販売実績データ232を統計的に解析した統計モデルを用いて商品の需要予測を行い、記憶部230に格納された販売実績データ232のデータ量がシステムの利用者が定める基準値と比較して多い場合には、商品の販売実績データ232を学習用データとして用いた機械学習モデルを用いて商品の需要予測を行う。
需要予測部212は、販売実績のデータ量が第1閾値未満である場合には、商品群別平均モデルを用いて商品の需要予測を行う。
需要予測部212は、販売実績のデータ量が第1閾値以上であり、かつ、第2閾値未満である場合には、商品別平均モデルを用いて商品の需要予測を行う。商品別平均モデルは、商品ごとの商品の販売実績の平均値を用いるモデルである。商品別平均モデルは、データの対象が狭く、予測方法が単純なモデルである。
需要予測部212は、販売実績のデータ量が第2閾値以上であり、かつ、第3閾値未満である場合には、商品群別機械学習モデルを用いて商品の需要予測を行う。商品群別機械学習モデルは、データの対象が広く、予測方法が複雑なモデルである。
需要予測部212は、販売実績のデータ量が第3閾値以上である場合には、商品別機械学習モデルを用いて商品の需要予測を行う。商品別機械学習モデルは、データの対象が狭く、予測方法が複雑なモデルである。
すなわち、需要予測部212は、販売実績のデータ量が多くなるにつれて、商品の需要予測に用いる需要予測モデルを、商品群別平均モデル、商品別平均モデル、商品群別機械学習モデル、および、商品別機械学習モデルの順に切り替える。ただし、需要予測部212は、販売実績のデータ量に応じた商品別平均モデルと商品群別機械学習モデルの優先順位を入れ替えてもよい。そして、需要予測部212は、記憶部230に格納された販売実績データ232のデータ量が少ない場合には、複数の商品を含む商品群ごとの需要予測モデルM1を用いて商品の需要予測を行い、記憶部230に格納された販売実績データ232のデータ量が多い場合には、商品ごとの需要予測モデルM1を用いて商品の需要予測を行う。また、需要予測部212は、記憶部230に格納された販売実績データ232のデータ量が少ない場合には、商品の販売実績を統計的に解析した統計モデルを用いて商品の需要予測を行い、記憶部230に格納された販売実績のデータ量が多い場合には、商品の販売実績データ232を学習用データとして用いて学習させた機械学習モデルを用いて商品の需要予測を行う。
次に、商品の需要予測の第1実施例の処理の流れについて説明する。
図18に示すように、需要予測部212はまず、気象情報を取得する(ステップS10)。
次に、需要予測部212は、カレンダー情報を取得する(ステップS12)。
次に、需要予測部212は、売価情報を取得する(ステップS14)。
次に、需要予測部212は、記憶部230に格納された商品の販売実績データ232のデータ量が第1閾値以上であるか否かを判定する(ステップS16)。需要予測部212は、商品の販売実績のデータ量が第1閾値未満であると判定した場合、商品群別平均モデルを用いて商品の需要予測を行う(ステップS18)。これによって、本フローチャートの処理が終了する。
需要予測部212は、商品の販売実績データ232のデータ量が第1閾値以上であると判定した場合、商品の販売実績データ232のデータ量が第2閾値以上であるか否かを判定する(ステップS20)。需要予測部212は、商品の販売実績データ232のデータ量が第2閾値未満であると判定した場合、商品別平均モデルを用いて商品の需要予測を行う(ステップS22)。これによって、本フローチャートの処理が終了する。
需要予測部212は、商品の販売実績データ232のデータ量が第2閾値以上であると判定した場合、商品の販売実績データ232のデータ量が第3閾値以上であるか否かを判定する(ステップS24)。需要予測部212は、商品の販売実績データ232のデータ量が第3閾値未満であると判定した場合、商品群別機械学習モデルを用いて商品の需要予測を行う(ステップS26)。これによって、本フローチャートの処理が終了する。
需要予測部212は、商品の販売実績のデータ量が第3閾値以上であると判定した場合、商品別機械学習モデルを用いて商品の需要予測を行う(ステップS28)。これによって、本フローチャートの処理が終了する。
次に、商品の需要予測の第2実施例について説明する。
需要予測部212は、商品の販売実績データ232を学習用データとして用いて機械学習モデルを用いて商品の需要予測を行う場合、記憶部230に格納された販売実績データ232のデータ量が所定量未満である場合には、第1機械学習モデルを用いて商品の需要予測を行い、記憶部230に格納された販売実績データ232のデータ量が所定値以上である場合には、第2機械学習モデルを用いて商品の需要予測を行う。第2機械学習モデルは、第1機械学習モデルに比して、データ量が多い学習用データを用いて機械学習により学習させたモデルである。
より詳細には、図19に示すように、需要予測部212は、商品の販売実績のデータが蓄積されておらず、商品の販売実績データ232のデータ量が第4閾値未満である場合には、商品ごとの商品の販売実績データ232を用いた機械学習により、商品別機械学習モデルとして第1機械学習モデルを学習させる。図19の例では、商品ごとの販売実績データ232のデータ項目として、商品コード、天気、日付、曜日、時間帯、売価、販売数を含む。天気、日付、曜日、時間帯、売価は、需要予測モデルへの入力に用いられるデータ項目であり、学習用データとして用いられる。販売数は、需要予測モデルから出力されるデータ項目であり、教師データとして用いられる。
需要予測部212は、商品の販売実績データ232が蓄積され、商品の販売実績データ232のデータ量が第4閾値以上となった場合、商品ごとの商品の販売実績データ232を用いた機械学習により、商品別機械学習モデルとして第2機械学習モデルを学習させる。図示の例では、商品ごとの販売実績データ232のデータ項目として、商品コード、天気、日付、曜日、時間帯、売価、販売数に加え、売価の統計値を含む。売価の統計値は、商品コード、天気、曜日、時間帯が共通する複数のデータにおける売価を統計的に処理した値であり、例えば、売価の平均値である。売価の統計値は、売価の分散値であってもよい。商品コード、天気、日付、曜日、時間帯、売価、売価の平均値は、需要予測モデルへの入力に用いられるデータ項目であり、学習用データとして用いられる。販売数は、需要予測モデルから出力されるデータ項目であり、教師データとして用いられる。
次に、商品の需要予測の第2実施例の処理の流れについて説明する。
図20に示すように、需要予測部212はまず、気象情報を取得する(ステップS30)。
次に、需要予測部212は、カレンダー情報を取得する(ステップS32)。
次に、需要予測部212は、売価情報を取得する(ステップS34)。
次に、需要予測部212は、記憶部230に格納された商品の販売実績データ232のデータ量が第1閾値以上であるか否かを判定する(ステップS36)。需要予測部212は、商品の販売実績データ232のデータ量が第1閾値未満であると判定した場合、商品群別平均モデルを用いて商品の需要予測を行う(ステップS38)。これによって、本フローチャートの処理が終了する。
需要予測部212は、商品の販売実績データ232のデータ量が第1閾値以上であると判定した場合、商品の販売実績データ232のデータ量が第2閾値以上であるか否かを判定する(ステップS40)。需要予測部212は、商品の販売実績データ232のデータ量が第2閾値未満であると判定した場合、商品別平均モデルを用いて商品の需要予測を行う(ステップS42)。これによって、本フローチャートの処理が終了する。
需要予測部212は、商品の販売実績データ232のデータ量が第2閾値以上であると判定した場合、商品の販売実績データ232のデータ量が第3閾値以上であるか否かを判定する(ステップS44)。需要予測部212は、商品の販売実績データ232のデータ量が第3閾値未満であると判定した場合、商品群別機械学習モデルを用いて商品の需要予測を行う(ステップS46)。これによって、本フローチャートの処理が終了する。
需要予測部212は、商品の販売実績データ232のデータ量が第3閾値以上であると判定した場合、商品の販売実績データ232のデータ量が第4閾値以上であるか否かを判定する(ステップS48)。需要予測部212は、商品の販売実績データ232のデータ量が第4閾値未満であると判定した場合、商品別機械学習モデルとして第1機械学習モデルを用いて商品の需要予測を行う(ステップS50)。これによって、本フローチャートの処理が終了する。
需要予測部212は、商品の販売実績のデータ量が第4閾値以上であると判定した場合、商品別機械学習モデルとして第2機械学習モデルを用いて商品の需要予測を行う(ステップS52)。これによって、本フローチャートの処理が終了する。
[基準在庫量の計算]
次に、基準在庫計算部214の処理の流れについて、図21のフローチャートを参照して説明する。
基準在庫計算部214は、まず、商品の販売実績に基づいて、商品の単位売残損失L1を計算する(ステップS60)。
次に、基準在庫計算部214は、商品の一単位あたりの正規売価から商品の仕入原価を差し引くことで、商品の単位売逃損失L2を計算する(ステップS62)。
次に、基準在庫計算部214は、時間帯ごとの販売実績値から時間帯ごとの需要予測値を差し引いて時間帯ごとの残差を算出することで、商品の需要予測残差分布を計算する(ステップS64)。
次に、基準在庫計算部214は、商品の需要予測残差分布と商品の単位売残損失L1と商品の単位売逃損失L2とに基づいて、商品の期待損失額Lを算出し、商品の期待損失額Lが最小となる在庫量を、商品の基準在庫量として計算する(ステップS66)。
次に、基準在庫計算部214は、全ての商品を探索したか否かを判定する(ステップS68)。基準在庫計算部214は、全ての商品を探索していないと判定した場合、対象の商品を変更し(ステップS70)、その処理をステップS60に戻す。そして、基準在庫計算部214は、全ての商品について、商品の基準在庫量を計算するまでの間、ステップS60~ステップS70の処理を繰り返す。基準在庫計算部214は、全ての商品を探索したと判定した場合、本フローチャートの処理が終了する。
次に、基準在庫量の計算処理の第1例について説明する。
単位売残損失L1は、一日または一時間などの販売時間単位の間に商品が一単位売れ残った場合の平均損失額を示す。単位売残損失L1は、例えば、商品の販売実績に基づいて決定される。単位売残損失L1は、商品を値引き後の売価で販売した場合の販売数と値引き損失合計額、商品を廃棄した場合の廃棄数と廃棄損失合計額、および、翌販売時間単位に持ち越した商品数に基づいて決定される。
図22は、単位売残損失L1の算出方法の一例を示す図である。図22では、販売時間単位は、店舗の開店時刻から閉店時刻までの時間であり、商品の在庫推移が、商品が製造された時間帯ごとに区別されている。また、商品の売価は、商品が製造された時点からの販売時間の経過に伴って、段階的に値引きされている。このような場合の単位売残損失L1は、以下の式(1)を用いて算出される。すなわち、値引きによる損失総額と廃棄による損失総額を販売時間単位に値引き販売した商品数と廃棄した商品数と次の販売時間単位に持ち越した商品数の合計数で除算し、平均の売れ残り損失額を計算している。なお、式(1)は、右辺について、複数の販売時間単位からなる期間で平均を求めてもよい。
単位売残損失L1は、商品が廃棄または値引き販売されていない商品である場合や、商品の廃棄または値引き販売に関するデータが保存されていない場合には、例えば、以下の式(2)を用いて、商品の原価を商品の販売期間の単位数により除算することで算出してもよい。
単位売逃損失L2は、欠品により一つの商品の販売機会を逃した場合の平均損失額を示す。単位売逃損失L2は、商品一単位あたりの正規売価から商品の仕入原価を差し引くことで算出される。
次に、基準在庫計算部214は、需要予測残差分布を作成する。需要予測残差分布は、販売時間単位ごとの残差の分布である。基準在庫計算部214は、販売時間単位の商品の販売実績値と需要予測値との差分データを残差として計算し、販売時間単位ごとの残差の分布を需要予測残差分布として作成する。需要予測値は、需要予測部212による商品の需要予測に基づく値である。ここで、販売実績値は、需要予測部212において売り逃しを加算して補正された値を用いてもよい。
図23は、需要予測残差分布の一例である度数分布を示す図である。図示の例では、横軸を残差kとし、縦軸を度数h(k)とした度数分布である。度数h(k)は、時間帯ごとの残差kの出現頻度を示す。図示の例では、残差が「0(零)」である場合の度数h(0)が最も大きく、残差の絶対値が大きくなるほど、度数h(k)が小さくなる傾向を有する。
図24は、需要予測残差分布の一例である確率分布を示す図である。図示の例では、横軸を残差rとし、縦軸を確率p(r)とした確率分布である。確率p(r)は、残差rの出現確率を示す。確率p(r)は、残差rを正規分布と仮定した場合、残差の平均値μr、標準偏差値σrから、以下の式(3)を用いて算出される。
次に、基準在庫計算部214は、商品の単位売残損失L1と、商品の単位売逃損失L2と、商品の需要予測残差分布とに基づいて、期待損失額Lを算出する。期待損失額Lは、商品の需要予測に基づく商品の損失額の期待値を示す。
図25は、需要予測量と同数の商品の在庫量を持つ場合において、商品の需要予測残差分布の一例である度数分布h(k)と、商品の売逃損失額kL2と、商品の売残損失額-kL1とを重ねて示した図である。この例では、期待損失額Lは、以下の式(4)を用いて算出される。
すなわち、残差kが正の値である場合には、売逃損失額はkL2になり、その発生確率はh(k)/Σh(n)になる。また、残差kが負の値である場合には、売残損失額は-kL1になり、その発生確率はh(k)/Σh(n)になる。よって、残差kごとの売り逃し損失額または売れ残り損失額と発生確率を乗算した値を合算することにより、期待損失額Lを算出する。
図26は、需要予測量よりもy個多い商品の在庫量を持つ場合において、商品の需要予測残差分布の一例である度数分布h(k)と、商品の売逃損失額(k-y)L2および売残損失額-(k-y)L1とを重ねて示した図である。この例では、期待損失額Lは、以下の式(5)を用いて算出される。
すなわち、残差kがyよりも大きい場合には、売り逃し損失額は(k-y)L2になり、その発生確率はh(k)/Σh(n)になる。また、残差kがyよりも小さい場合には、売れ残り損失額は-(k-y)L1になり、その発生確率はh(k)/Σh(n)になる。よって、残差kごとの売り逃し損失額または売れ残り損失額と発生確率を乗算した値を合算することにより、期待損失額L(y)を算出する。
図27は、需要予測量と同数の商品の在庫量を持つ場合において、商品の需要予測残差分布の一例である確率分布p(r)と、商品の売り逃し損失額rL2および売れ残り損失額-rL1とを重ねて示した図である。この例では、期待損失額Lは、以下の式(6)を用いて算出される。
すなわち、残差rが正の値である場合には、売り逃し損失額はrL2になり、その発生確率はp(r)になる。また、残差rが負の値である場合には、売れ残り損失額は-rL1になり、その発生確率はp(r)になる。よって、残差rの売り逃し損失額または売れ残り損失額と発生確率を乗算した値を積分することにより、期待損失額Lを算出する。
図28は、需要予測量よりもy個多い商品の在庫量を持つ場合において、商品の需要予測残差分布の一例である確率分布p(r)と、商品の売り逃し損失額(r-y)L2および売れ残り損失額-(r-y)L1とを重ねて示した図である。この例では、期待損失額Lは、以下の式(7)を用いて算出される。
すなわち、残差rがyよりも大きい場合には、売り逃し損失額は(r-y)L2になり、その発生確率はp(r)になる。また、残差rがyよりも小さい場合には、売れ残り損失額は-(r-y)L1になり、その発生確率はp(r)になる。よって、残差rの売り逃し損失額または売れ残り損失額と発生確率を乗算した値を積分することにより、期待損失額L(y)を算出する。
次に、基準在庫計算部214は、期待損失額Lが最小になる加算量yを探索する。具体的な例としては、加算量yを、需要予測部212により予測された商品の需要予測量に-1を乗算した値から需要予測量の値まで1を加算しながら変化させ、期待損失額Lを計算して、期待損失額Lが最小になる加算量yを見つけ出す。そして、基準在庫計算部214は、需要予測部212により予測された商品の需要予測量に対し、探索された加算量yを加算することで、商品の基準在庫量を計算する。
次に、基準在庫量の計算処理の第2例として、期待損失額が最小になる加算量yを計算する方法について説明する。商品の単位売残損失L1の計算、商品の単位売逃損失L2の計算、商品の需要予測残差分布の計算は第1例と共通である。
基準在庫計算部214は、同一の商品について、販売時間単位の間に商品が一単位売れ残った場合の平均損失額である単位売残損失L1と、欠品により一つの商品の販売機会を逃した場合の平均損失額である単位売逃損失L2との合計値に対する単位売逃損失L2の比率を計算する。また、基準在庫計算部214は、複数の販売時間単位における残差を昇順に並べる。そして、基準在庫計算部214は、複数の販売時間単位における残差を昇順に並べた場合に、複数の販売時間単位における残差のデータ数に対して上記の比率を積算した値の順序に位置する残差に対して需要予測値を合算した値を、商品の基準在庫量として計算する。
図29は、基準在庫量の計算処理の第2例を説明するための図である。図示の例では、需要予測残差分布として度数分布が算出されている。
まず、基準在庫計算部214は、販売時間単位の商品の販売実績値と需要予測値との差分データを残差kとして計算し、残差kを小さい順(昇順)に並び替える。
次に、基準在庫計算部214は、同一の商品について、単位売残損失L1と単位売逃損失L2との合計値に対する単位売逃損失の比率rate(=L2/(L1+L2))を計算する。
次に、基準在庫計算部214は、小さい方から数えて、[比率rate×残差データ数N]番目の残差kを、期待損失額Lが最小になる加算量yとして決定する。
そして、基準在庫計算部214は、需要予測部212により予測された商品の需要予測量に対し、上述のように決定した加算量yを加算することで、商品の基準在庫量を計算する。
基準在庫計算部214は、複数の販売時間帯における残差の中に異常値が含まれる場合、異常値が除外された残差に基づいて、商品の基準在庫量を計算する。基準在庫計算部214は、例えば、残差kの四分位範囲の定数倍を残差kの許容範囲とし、許容範囲から外れた残差kを異常値と判定して除外する。
需要予測残差分布を確率分布で表した場合の基準在庫量の計算方法について説明する。
基準在庫計算部214は、同一の商品について、販売時間単位の間に商品が一単位売れ残った場合の平均損失額である単位売残損失L1と、欠品により一つの商品の販売機会を逃した場合の平均損失額である単位売逃損失L2との合計値に対する単位売逃損失L2の比率を計算する。また、基準在庫計算部214は、需要予測残差分布を表す確率分布を積分した累積分布関数の値が比率に一致する残差の値に対して需要予測値を合算した値を、商品の基準在庫量として計算する。
図30は、基準在庫量の計算処理の第3例を説明するための図である。図示の例では、需要予測残差分布を表す確率分布を積分した累積分布関数を示している。
まず、基準在庫計算部214は、同一の商品について、単位売残損失L1と単位売逃損失L2との合計値に対する単位売逃損失の比率rate(=L2/(L1+L2))を計算する。
次に、基準在庫計算部214は、需要予測残差分布を表す確率分布を積分した累積分布関数を生成し、累積分布関数の値が比率rateに一致する残差rを、期待損失額Lが最小になる加算量yとして決定する。
そして、基準在庫計算部214は、需要予測部212により予測された商品の需要予測量に対し、上述のように決定した加算量yを加算することで、商品の基準在庫量を計算する。
なお、実際には、累積分布関数の値が比率rateに一致する残差rを計算で求めることは難しいので、標準正規分布表を使い、標準正規分布の確率(面積)が比率rateに一致する確率変数の値xを求め、需要予測残差分布の平均値ave、標準偏差値sigmaによって残差rを求めることができる。残差rは、例えば、以下の式(8)を用いて算出される。
[発注推奨量の計算]
次に、商品の発注推奨量の第1計算例について説明する。
発注推奨量計算部216は、以下の式(9.1)を用いて、商品の発注推奨量を計算する。
ORR(X)は、日付Xをパラメータとし、日付の発注推奨量を出力する関数である。OIV(X)は、日付Xにおいて損失が最小となる開店時の基準在庫量を出力する関数である。LT(X)は、日付Xにおいて発注した場合のリードタイムを出力する関数である。リードタイムは、発注から納品までに必要な時間を意味する。DLVは、納品してから消費者の需要に対応できる状態になるまでの日数を表す整数である。DLVは、例えば、物流センターやプロセスセンターから店舗までの便に依存して決まる。例えば、納品日当日の需要に利用可能な早期宅配便である場合には「0」を付与し、納品日翌日の需要に利用可能となる配送時間帯の便である場合には「1」を付与するパラメータである。IVF(X)は、日付Xの開店時の予測在庫量を出力する関数である。INT(X)は、発注当日から次回発注までの間隔を示すパラメータである。DF(T)は、各日付の予測需要数を出力する関数である。すなわち、日付Xにおける発注推奨量は、発注してから店頭に並ぶまでの日付LT(X)+DLV後の基準在庫量と予測在庫量との差に、店頭に並んだ後、次回発注の商品が店頭に並ぶ前までの各日付の予測需要数を加算した数量として算出する。以降、説明を簡潔にするため、納品してから店頭に並ぶまでの時間差は省略して、日付LT(X)+DLV後を納品タイミングと表現することがある。
ここで、式(9.1)の右辺第一項から第二項が、納品タイミングにおける基準在庫量と予測在庫量との差であるが、この差を求めるための右辺第一項と第二項は、基準在庫量に対して予測在庫量が不足する量を求めるための演算を行っている。したがって、式(9.1)においては方式説明を複雑化しないように省略しているが、実際のプログラムコードの実装においては、右辺第一項と第二項の演算結果が負数となる場合はゼロに置き換える処理を加えても良い。
式(9.1)のXは日付として説明したが、時間単位で生産する商品の生産推奨数計算として用いる場合にはXは時間帯を表すとしてもよい。その場合、T、LT、DLVも日付ではなく時間帯として用いる。すなわち、時間帯Xにおける生産推奨数ORR(X)は、生産指示してから店頭に並ぶまでの時間LT(X)+DLV後の基準在庫量と予測在庫量との差に、店頭に並んだ後の次回の生産商品が店頭に並ぶ前までの各時間帯の予測需要数を加算した数量として算出する。
また、式(9.1)に、店頭の演出考慮に対応する演算を含めてもよい。例えば、店頭に並べておく在庫量を最低でもP個維持しておきたい場合には、式(9.1)の右辺第一項OIVの算出結果とPを比較し、右辺第一項を大きい方で置き換えるようにしてもよい。
また、例えば生産ロットなどの理由から、発注数や生産数が商品によって決まる整数の倍数である必要がある場合があるが、その場合は、式(9.1)で算出された数を当該整数の倍数に切り上げるなどして発注推奨量または生産推奨量としてもよい。
図31は、DLVが「0(零)」である場合における発注推奨量の計算の過程を示す図である。図示の例では、日付Xにおいて商品の発注が行われる。そして、日付XからリードタイムLT(X)が経過した日付「X+LT(X)」において、発注した商品の納品が行われる。納品された商品は、DLVが「0(零)」であることから、納品当日である日付「X+LT(X)」において、商品が店舗に陳列される。また、日付「X」からINT(X)が経過した日付「X+INT(X)」において、次回の商品の発注が行われる。そして、日付「X+INT(X)」からリードタイムLT(X+INT(X))が経過した日付「X+INT(X)+LT(X+INT(X))」において、次回に発注した商品の納品が行われる。また、次回の納品当日である日付「X+INT(X)+LT(X+INT(X))」において、商品が店舗に陳列される。発注推奨量計算部216は、日付「X+LT(X)」における開店時の基準在庫量から開店時の予測在庫量を差し引く。また、発注推奨量計算部216は、差し引いた値に対し、最初の納品当日の翌日である日付「X+LT(X)+1」から次回の商品陳列日の前日である日付「X+INT(X)+LT(X+INT(X))-1」までの需要予測量、および、演出効果目的で需要予測通りに売れた後に残すべき在庫量を加算することで、商品の発注推奨量を算出する。
図32は、DLVが「1」である場合における発注推奨量の計算の過程を示す図である。図示の例では、日付Xにおいて商品の発注が行われる。そして、日付XからリードタイムLT(X)が経過した日付「X+LT(X)」において、発注した商品の納品が行われる。納品された商品は、DLVが「1」であることから、納品翌日である日付「X+LT(X)+1」において、商品が店舗に陳列される。また、日付「X」からINT(X)が経過した日付「X+INT(X)」において、次回の商品の発注が行われる。そして、日付「X+INT(X)」からリードタイムLT(X+INT(X))が経過した日付「X+INT(X)+LT(X+INT(X))」において、次回に発注した商品の納品が行われる。また、次回の納品翌日である日付「X+INT(X)+LT(X+INT(X))+1」において、商品が店舗に陳列される。発注推奨量計算部216は、日付「X+LT(X)+1」における開店時の基準在庫量から開店時の予測在庫量を差し引く。また、発注推奨量計算部216は、差し引いた値に対し、店舗に商品を陳列した日の翌日である日付「X+LT(X)+2」から次回の商品陳列日の前日である日付「X+INT(X)+LT(X+INT(X))」までの需要予測量、および、演出効果目的で需要予測通りに売れた後に残すべき在庫量を加算することで、商品の発注推奨量を算出する。
発注推奨量計算部216は、以下の式(9.2)を用いて、式(9.1)の右辺第二項のIVF、すなわち予測在庫量を計算する。式(9.2)は、日付Xにおいて、日付XからP日後の将来の在庫予測量IVF(X+P)を計算する方法を表している。
ここで、式(9.2)の右辺第一項のIV(X)は、日付Xにおける開店時在庫計算結果であり、計算方法は既に述べた理論在庫の計算方法に従って算出される。式(9.2)の右辺第二項のRVF(T)は日付Tの納品予定数であり、例えば、日付X以前の発注実績に基づいて計算される。すなわち、式(9.2)は、日付XからP日経過後の将来の開店時予測在庫数を、日付Xの開店時在庫数に、日付Xから日付X+Pの前日までの期間の納品予定数を加え、さらに日付Xから日付X+Pの前日までの需要予測数を減じることによって計算されることを表す。
またここで、式(9.2)は、日付XからP日経過後の将来の開店時予測在庫数を求めるための式である。式(9.2)においては方式説明を複雑化しないように省略しているが、実際のプログラムコードの実装においては、右辺の計算結果が負数となる場合はゼロに置き換える処理を加えてもよい。
〔不定貫商品の発注推奨量の計算〕
発注推奨量計算部216は、一つ一つのパックの内容量が同じではない商品である不定貫商品の発注推奨量を計算する場合、内容量に対応する単位、即ち、重量等を単位として前記手順により与えられた発注推奨量を、パック詰めを考慮して補正する必要がある。そこで、発注推奨量計算部216は、まず、商品の内容量ごとの販売実績の割合に基づいて、商品の内容量ごとの販売パック数を最も数値の近い整数値に換算して求める。次に、発注推奨量計算部216は、求められた販売パック数に対して商品の内容量を積算することで、商品の内容量ごとの販売量の換算値を計算する。そして、発注推奨量計算部216は、重量を単位として予め得られた発注推奨量との差が小さくなるように、商品の内容量ごとの販売パック数および販売量の換算値、あるいは予め得られた発注推奨量を補正し、補正した値を商品の補正後の発注推奨量として出力する。
図33は、不定貫商品の重量を単位とした発注推奨量を算出するための発注推奨量算出用データ390の一例を示すデータである。発注推奨量算出用データ390のデータ項目は、例えば、内容量V、販売量実績比率P、内容量Vと販売量実績比率Pとの積、内容量Vと販売量実績比率Pとの積の比率、補正前の発注推奨量M、パック数N、四捨五入したパック数N、販売量の換算値、誤差、および、備考を含む。内容量Vは、商品の内容量の種別を示すデータである。販売量実績比率Pは、商品の販売実績に基づく、商品の内容量ごとの販売数実績の比率を示すデータである。内容量Vと販売量実績比率Pとの積の比率は、内容量Vと販売量実績比率Pとの積の割合を合計が1となるように0~1の数値範囲で正規化したものである。各内容量の補正前の発注推奨量Mは、与えられた発注推奨量に対してV×Pの比率を掛けた値である。パック数Nは、補正前の発注推奨量Mを内容量Vで除算したデータである。販売量の換算値は、四捨五入したパック数Nと内容量Vとを積算した値である。誤差は、販売量の換算値から補正前の発注推奨量Mを差し引いた値である。備考は、誤差の値に関する付記情報を示すデータである。図示の例では、備考は、誤差のプラスの値の絶対値が最も大きいデータに対して「プラス最大」のラベルが付与され、誤差のマイナスの値の絶対値が最も大きいデータに対して「マイナス最大」のラベルが付与される。
発注推奨量計算部216は、商品の内容量ごとの販売量の換算値の合算値が、予め得られた発注推奨量よりも小さい場合には、その差分よりも少量の商品の内容量を対象として、パック数Nと販売量の換算値を増大させる。図33に示す例では、発注推奨量計算部216は、誤差の合計がマイナスである場合、誤差の合計の絶対値を超えない内容量を対象として、パック数Nと販売量の換算値を加算する。また、図33に示す例では、発注推奨量計算部216は、例えば、誤差の絶対値を超えない内容量のうち、販売量実績比率が高い内容量を優先して、パック数Nと販売量の換算値を加算する。この例では、発注推奨量計算部216は、マイナスの絶対値が「200」であるため、余りを超えない内容量「100」、「200」のうち、販売量実績比率が高い内容量「200」を優先して、販売量の換算値を加算する。そして、発注推奨量計算部216は、販売量の換算値の合計値を、予め得られた発注推奨量に対する補正後の発注推奨量とする。
発注推奨量計算部216は、商品の内容量ごとの販売量の換算値の合算値が、与えられた発注推奨量よりも小さい場合において、その差分が商品の内容量の最小値よりも小さい場合には、販売パック数および販売量の換算値を増大させることなく、販売量の換算値の合計値を、予め得られた発注推奨量に対する補正後の発注推奨量とする。
発注推奨量計算部216は、商品の内容量ごとの販売量の換算値の合算値が、予め得られた発注推奨量よりも大きい場合には、その差分だけ、予め得られた発注推奨量を増大させる。また、発注推奨量計算部216は、増大させた発注推奨量を、予め得られた発注推奨量に対する補正後発注推奨量とする。図33に示す例では、発注推奨量計算部216は、誤差の合計がプラスである場合、当該誤差の合計を予め得られた発注推奨量に加算し、補正後発注推奨量とする。
このように、不定貫商品については、内容量に対応する単位で与えられた発注推奨量を内容量ごとの販売実績比率に基づく計算により、各内容量に対応する補正後の発注推奨量と、それら合計値に一致した補正後の発注推奨量を得る。
次に、商品の発注推奨量の第1計算例の処理の流れについて説明する。
図34に示すように、発注推奨量計算部216は、まず、発注当日以降の所定期間の需要予測量と基準在庫量を更新する(ステップS80)。
次に、発注推奨量計算部216は、理論在庫の計算方式を用いて、発注当日の各開始時在庫量を計算する(ステップS82)。
次に、発注推奨量計算部216は、式(9.2)ないし式(10.2)を用いて、発注当日以降の所定期間の各開始時予測在庫量を計算する(ステップS84)。
次に、発注推奨量計算部216は、式(9.1)ないし式(10.1)を用いて、発注当日の発注推奨量を計算する(ステップS86)。
次に、発注推奨量計算部216は、複数の内容量種別にパック詰めして販売する不定貫商品であるか否かを判定する(ステップS88)。発注推奨量計算部216は、不定貫商品であると判定した場合、各内容量の販売量実績比率に基づいたパック数分割計算に基づく発注推奨量を補正計算し(ステップS90)、その処理をステップS92に移行する。一方、発注推奨量計算部216は、不定貫商品ではないと判定した場合、ステップS90の処理を経ることなく、その処理をステップS92に移行する。
その後、発注推奨量出力部218は、発注推奨量計算部216により計算された発注推奨量を出力する(ステップS92)。これによって、本フローチャートの処理が終了する。
なお、前記発注推奨量の計算処理の流れの説明において日単位の計算を例として示したが、上述の発注推奨量の計算式の説明と対応させて、同様の処理ステップを時間帯単位の計算処理として実行してもよい。後述する第2計算例についても同様である。
また、前記発注推奨量の計算処理の流れは、日単位計算の場合、例えば、発注推奨量の計算対象の商品が発注可能である日に一日一回、同じ時間帯に実行してもよいし、一日に複数回実行してもよい。時間単位計算の場合、例えば、発注推奨量の計算対象の商品が発注可能である時間帯に一時間に一回、一時間に複数回、あるいは数時間に一回実行してもよい。後述する第2計算例についても同様である。
次に、商品の発注推奨量の第2計算例について説明する。
発注推奨量計算部216は、発注した商品が店頭に並ぶ将来時点の商品予測在庫数を計算し、同じ将来時点における基準在庫数との差を当該将来時点で不足する数量として計算する。また、発注推奨量計算部216は、現時点で発注する商品が店頭に並ぶ時点よりも後で次回発注する商品が店頭に並ぶ時点より前までの予測需要数合計を、前記の不足する数量として計算した数に加算することで、商品の発注推奨量を計算する。発注推奨量計算部216は、例えば、以下の式(10.1)を用いて、商品の発注推奨量を計算する。
EXは、商品が店頭に陳列されてから販売期限が満了するまでの時間を表すパラメータである。式(9.1)として示した第1計算例との違いは、商品の販売期間を考慮して、右辺第三項の合計期間を計算している点である。式(10.1)の右辺第三項は、発注した商品が店頭に並ぶ将来時点よりも後の予測需要量を計算しており、当該将来時点の商品予測在庫数と基準在庫数との差に加算される。式(10.1)の右辺第三項は、次回発注する商品が店頭に並ぶタイミング、または、日付Xにおいて今回発注する商品の販売期限が満了するタイミングのうち、早いタイミングまでの期間を合計期間としている。式(10.1)の右辺第三項は、次回発注する商品が店頭に並ぶタイミングよりも、今回発注する商品の販売期限が早く満了する場合、日付Xにおいて今回発注する数量に、今回発注する商品の販売期限が満了した後の需要量を加算しないようにしている。
なお、式(10.1)の右辺第一項および第二項が、納品タイミングにおける基準在庫量と予測在庫量との差を求めるための演算を行っており、基準在庫量に対して予測在庫量が不足する数量を求めるための演算を行っている。したがって、式(10.1)においては方式説明を複雑化しないように省略しているが、実際のプログラムコードの実装においては、右辺第一項および第二項の演算結果が負数となる場合はゼロに置き換える処理を加えてもよい。
また、発注推奨量計算部216は、以下の式(10.2)を用いて、式(10.1)の右辺第二項のIVF、すなわち予測在庫量を計算する。式(10.2)は、日付Xにおいて、日付XからP日経過後の将来の在庫予測量IVF(X+P)を計算する方法を表している。
式(10.2)の右辺第四項と第五項が、式(9.2)に対して加えられた項である。式(10.2)の右辺第四項は、日付Xの時点で納品済みの商品のうち、日付X+Pが到来するまでに販売期限が満了する条件を満たす商品の数であり、式(10.2)の右辺第五項は、日付Xの時点で納品予定の商品のうち、日付X+Pが到来するまでに販売期限が満了する条件を満たす商品の数である。式(10.2)は、式(9.2)に対して、将来在庫数の予測計算において納品済みの商品および納品予定の商品のうち、予測しようとする将来時点において販売期限が満了する条件を満たす商品の数量を差し引くという考慮を加えている。
ここで、式(10.2)は、日付XからP日経過後の将来の開店時予測在庫数を求めるための式である。したがって、式(10.2)においては方式説明を複雑化しないように省略しているが、実際のプログラムの実装においては、右辺の計算結果が負数となる場合はゼロに置き換える処理を加えてもよい。
以下、発注推奨量計算部216は、発注推奨量の計算の時点で納品済みの商品について、式(10.2)の計算においてリードタイム後の在庫数をどのように計算し、また、式(10.1)の計算においてリードタイム後の需要加算期間をどのように設定するかについて、図面を参照して説明する。
図35に示す「ケースA1」の例は、販売期間がリードタイムよりも小さい場合を示している。この場合、発注当日に発注した商品のリードタイムが経過する前に、納品済みの商品すべての販売期限が満了する。したがって、発注推奨量計算部216は、式(10.2)の右辺第四項は同第一項を相殺する。また、図35に示した例では、次回に発注した商品のリードタイムが経過する前に、発注当日に発注した商品の販売期限が満了する。そのため、式(10.1)の右辺第三項のリードタイム後の需要加算期間は、発注当日に発注した商品の販売期限が満了する時点までとなり、それ以降、次回に発注した商品のリードタイムが経過するまでの間は計画的な欠品期間となる。
図36に示す「ケースA2」は、「ケースA1」には該当しないが、発注当日から商品のリードタイムLT(X)が経過した時点より商品の販売期限が満了するタイミングが早い過去の納品が存在している場合を示している。図示の例では、発注当日に発注した商品のリードタイムが経過する前に販売期限が満了する、過去に納品した商品が存在する。したがって、発注推奨量計算部216は、式(10.2)の右辺第四項によって当該条件を満たす商品の数量を右辺第一項から減算する。また、図36の例では、次回に発注した商品のリードタイムが経過する前に、発注当日に発注した商品の販売期限が満了する。そのため、式(10.1)の右辺第三項のリードタイム後の需要加算期間は、発注当日に発注した商品の販売期限が満了する時点までとなり、それ以降、次回に発注した商品のリードタイムが経過するまでの間は計画的な欠品期間となる。
図37に示す「ケースA3」は、納品済みの商品の販売期限と発注当日に発注した商品のリードタイムとの関係性において、「ケースA1」にも「ケースA2」にも該当しない場合を示している。図示の関係においては、発注当日から商品のリードタイムLT(X)が経過した時点より過去に納品した商品の販売期限が満了するタイミングが遅い。発注推奨量計算部216は、このような場合、式(10.2)の右辺第四項で納品済みの商品の数量を減算する必要はない。また、図37の例では、次回に発注した商品のリードタイムが経過した後に、発注当日に発注した商品の販売期限が満了する。そのため、式(10.1)の右辺第三項のリードタイム後の需要加算期間は、次回発注の商品のリードタイム後までとなり、商品の計画的な欠品期間は生じない。
次に、発注推奨量計算部216が、発注推奨量の計算の時点で納品予定の商品について、式(10.2)の計算においてリードタイム後の在庫数をどのように計算し、また、式(10.2)の計算においてリードタイム後の需要加算期間をどのように設定するかについて、図面を参照して説明する。
図38に示す「ケースB1」は、発注当日から商品のリードタイムLT(X)が経過した時点より販売期限が満了するタイミングが早い、納品待ちの商品が存在する場合を示している。この場合、発注推奨量計算部216は、式(10.2)の右辺第四項によって当該条件の商品の数量を右辺第二項から減算する。また、図38の例では、次回に発注した商品のリードタイムが経過する前に、発注当日に発注した商品の販売期限が満了する。そのため、式(10.1)の右辺第三項のリードタイム後の需要加算期間は、発注当日に発注した商品の販売期限が満了する時点までとなり、それ以降、次回に発注した商品のリードタイムが経過するまでの間は計画的な欠品期間となる。
図39に示す「ケースB2」は、「ケースB1」に該当しない場合を示している。図示の関係においては、発注当日から商品のリードタイムLT(X)が経過した時点より納品待ちの商品の販売期限が満了するタイミングが遅い。発注推奨量計算部216は、このような場合、式(10.2)の右辺第五項で納品予定の商品の数量を減算する必要はない。また、図39の例では、次回に発注した商品のリードタイムが経過した後に、発注当日に発注した商品の販売期限が満了する。そのため、式(10.1)の右辺第三項のリードタイム後の需要加算期間は、次回発注の商品のリードタイム後までとなり、商品の計画的な欠品期間は生じない。
なお、上記の式(10.2)は、引き算によって、日付XからP日経過後において販売期限を満了していない商品の数を算出しているが、同様の商品の数を式(10.2)に忠実な引き算によって求めなくてもよい。式(10.2)では、納品タイミングにおいて販売期限が満了していない納品済みの商品の在庫数に、納品タイミングまでに納品する予定となっている商品の数を加算し、納品タイミングまでの商品の予定需要数を減算することで、納品タイミングにおける商品の予測在庫数を算出する。式(10.2)は、販売期限を考慮した予測在庫数算出の一実施例を、式(9.2)との比較が説明しやすいように示した式である。したがって、例えば、日付XからP日経過後において販売期限を満了していない納品済みの商品の数を式(10.2)の右辺第一項とし、日付XからP日経過後において販売期限を満了していない日付XからP日経過後の間に納品する予定の商品数を同式の右辺第二項とし、同式の右辺第四項と第五項を省略してもよい。
以上説明した実施形態の損失推定システムによれば、商品の在庫数を計算し、計算された商品の在庫数が負の値である場合、商品の在庫数を補正し、商品の在庫数が補正された時間帯について、商品の欠品の判定を行わない。これにより、商品の欠品の判定の精度を高めることができる。
また、損失推定システムは、計算された商品の在庫数が負の値である場合、商品の在庫数を正の値に補正し、商品の在庫数が「0(零)」である場合、商品が欠品していると判定する。これにより、商品の欠品の判定の精度を高めることができる。
また、損失推定システムは、計算された商品の在庫数が負の値である場合、商品の在庫数を負でない値に補正すると共に、当該商品の当該時間帯について補正済であることを示す情報を保存し、商品の時間帯について補正済であることを示す情報が保存されている場合、当該時間帯について商品の欠品の判定を行わない。これにより、商品の欠品の判定の精度を高めることができる。
また、損失推定システムは、在庫数の時系列データに対し、時間軸を遡るように在庫数の時系列データを順に補正し、補正対象の在庫数が「0(零)」であり、かつ、一つ前の時刻の在庫数の補正を行った場合には、在庫数を正の値に補正する。これにより、商品の欠品の判定の精度をより一層高めることができる。
また、損失推定システムは、補正対象の在庫数が「0(零)」である場合、一つ前の時刻の在庫数の補正を行っていない場合には、在庫数を補正しない。これにより、商品の欠品の判定の精度をより一層高めることができる。
また、損失推定システムは、在庫数の時系列データに対して所定期間単位で時間軸に沿って補正を行う場合、最初の所定期間に含まれる在庫数の時系列データの初期値を「0(零)」として計算する。これにより、在庫数の時系列データは、データの蓄積とともに所定期間単位で補正が繰り返し行われ、補正をしなくても正の値となりやすくなり、商品の在庫データの精度を高めることができる。
また、実施形態の発注推奨システムによれば、販売時間単位の商品の販売実績値と需要予測値との差分データを残差として計算し、同一の商品について、一つの商品が売れ残った場合の販売時間単位の損失額である単位売残損失と、一つの商品が欠品により販売機会を逃した場合の販売時間単位の損失額である単位売逃損失との合計値に対する単位売逃損失の比率を計算し、前記差分計算により計算された複数の販売時間帯における差分データを昇順に並べた場合に、複数の販売時間帯における差分データのデータ数に対して比率を積算した値の順序に位置する残差に対して前記需要予測値を合算した値を、商品の期待損失額が最小になる在庫量である基準在庫量として計算する。これにより、複雑な計算処理を要することなく基準在庫量が計算できるため、在庫最適化に関する数値計算を行う際のコンピュータの処理負荷を低減することができる。
また、実施形態の発注推奨システムによれば、販売時間単位の商品の販売実績値と需要予測値との差分データを残差として計算し、販売時間単位ごとの残差の分布を需要予測残差分布として作成し、需要予測残差分布を表す確率分布を積分した累積分布関数を生成し、同一の商品について、一つの商品が売れ残った場合の販売時間単位の損失額である単位売残損失と、一つの商品が欠品により販売機会を逃した場合の販売時間単位の損失額である単位売逃損失との合計値に対する前記単位売逃損失の比率を計算し、前記累積分布関数の値が前記比率に一致する残差を、商品の期待損失額が最小になる在庫量である基準在庫量として計算する。これにより、複雑な計算処理を要することなく基準在庫量が計算できるため、在庫最適化に関する数値計算を行う際のコンピュータの処理負荷を低減することができる。
また、発注推奨システムは、単位売残損失が商品の販売実績データに基づいて決定される。これにより、基準在庫量の計算の精度を高めることができる。
また、発注推奨システムは、単位売残損失が、少なくとも、商品を値引き後の売価で販売した場合の値引き損失合計額、および、商品を廃棄した場合の廃棄損失合計額に基づいて決定される。これにより、基準在庫量の計算の精度をより一層高めることができる。
また、発注推奨システムは、複数の販売時間帯における差分データの中に異常値が含まれる場合、異常値が除外された差分データに基づいて基準在庫量を計算する。これにより、基準在庫量の計算の精度をより一層高めることができる。
また、実施形態の需要予測装置によれば、記憶部に格納された商品の販売実績を需要予測モデルに入力することで商品の需要予測を行い、商品の需要予測を行う場合、記憶部に格納された販売実績のデータ量に応じて前記需要予測モデルを変更する。これにより、商品の需要予測の精度を高めることができる。
また、需要予測装置は、記憶部に格納された販売実績のデータ量が多くなるにつれて、予測精度の高い前記需要予測モデルを用いて商品の需要予測を行う。これにより、商品の需要予測の精度をより一層高めることができる。
また、需要予測装置は、記憶部に格納された販売実績のデータ量が相対的に少ない場合には、複数の商品を含む商品群ごとの前記需要予測モデルを用いて商品の需要予測を行い、記憶部に格納された販売実績のデータ量が相対的に多い場合には、商品ごとの前記需要予測モデルを用いて商品の需要予測を行う。これにより、商品の需要予測の精度をより一層高めることができる。
また、需要予測装置は、記憶部に格納された販売実績のデータ量が相対的に少ない場合には、商品の販売実績を統計的に解析した統計モデルを用いて商品の需要予測を行い、記憶部に格納された販売実績のデータ量が相対的に多い場合には、商品の販売実績を学習用データとして用いて学習させた機械学習モデルを用いて商品の需要予測を行う。これにより、商品の需要予測の精度をより一層高めることができる。
また、需要予測装置は、商品の販売実績を学習用データとして用いて学習させた機械学習モデルを用いて商品の需要予測を行う場合、記憶部に格納された販売実績のデータ量が所定量未満である場合には、第1機械学習モデルを用いて商品の需要予測を行い、記憶部に格納された販売実績のデータ量が所定量以上である場合には、第1機械学習モデルに比して学習用データのデータ量が多い第2機械学習モデルを用いて商品の需要予測を行う。これにより、商品の需要予測の精度をより一層高めることができる。
また、実施形態の需要予測装置は、商品の販売時間帯ごとの販売実績に基づく販売数に対し、欠品により商品の販売機会を逃した商品の販売時間帯ごとの売り逃し数を合算することで、商品の販売時間帯ごとの販売数を補正し、補正された商品の販売時間帯ごとの販売数を含む学習用データを用いて学習された需要予測モデルに対し、予測対象の販売時間帯を入力することで、商品の需要を予測する。これにより、商品の需要予測の精度を高めることができる。
また、需要予測装置は、補正された商品の販売時間帯ごとの販売数に基づいて、商品の販売時間帯ごとの品揃えの有無を判定し、品揃えが無いと判定した販売時間帯を除外した販売時間帯における商品の販売数を含む学習用データを用いて学習された需要予測モデルに対し、予測対象の販売時間帯を入力することで、商品の需要予測を行う。これにより、商品の需要予測の精度をより一層高めることができる。
また、需要予測装置は、一定期間補正された販売数が「0(零)」である場合、その期間における商品の品揃えが無いと判定する。これにより、商品の需要予測の精度をより一層高めることができる。
また、需要予測装置は、一定期間補正された販売数が「0(零)」である場合において、商品の販売期間が所定長さ未満である場合には、その期間における商品の品揃えが無いと判定する。これにより、商品の需要予測の精度をより一層高めることができる。
また、実施形態の損失推定システムは、商品の時間帯ごとの販売実績に基づいて、欠品により販売機会を逃した場合の損失である商品の売り逃し量を計算し、商品の売り逃し量に基づいて売り逃し高を計算し、売り逃し高に対して商品の売上を加算することで、商品の単品別の需要金額を計算し、複数の商品を含むカテゴリの売上に基づいて、カテゴリの需要金額を計算し、商品の単品別の需要金額と、カテゴリの需要金額とに基づいて、同一のカテゴリに含まれる代替商品の販売による商品の販売実績への影響度合いを評価し、評価された影響度合いに基づいて、商品の売り逃し量を補正する。これにより、欠品による商品の販売機会を逃した場合の損失の推定の精度を高めることができる。
また、損失推定システムは、カテゴリの需要金額に対する、商品の単品別の需要金額の合計値の比率が大きいほど、影響度合いを大きく評価する。これにより、欠品による商品の販売機会を逃した場合の損失の推定の精度をより一層高めることができる。
また、損失推定システムは、商品が欠品していた時間帯が存在する場合、商品が欠品していた時間帯の販売実績を、商品が欠品していなかった時間帯の販売実績を用いて補完することで、商品の売り逃し量を計算する。これにより、欠品による商品の販売機会を逃した場合の損失の推定の精度をより一層高めることができる。
また、損失推定システムは、商品が欠品していた時間帯が存在する場合、商品が欠品していた時間帯の販売実績を、商品が欠品していなかった曜日区分と時間帯の販売実績を用いて補完することで、商品の売り逃し量を計算する。これにより、欠品による商品の販売機会を逃した場合の損失の推定の精度をより一層高めることができる。
また、損失推定システムは、商品が欠品していた時間帯がある一定期間だけ存在し、かつ他の期間に商品が欠品していなかった場合、商品が欠品していなかった曜日区分と時間帯を含めての販売実績を用いて補完することで、商品の売り逃し量を計算する。これにより、欠品による商品の販売機会を逃した場合の損失の推定の精度をより一層高めることができる。
また、損失推定システムは、商品が欠品していた時間帯の販売実績を、商品が欠品していなかった時間帯の販売実績を用いて補完する場合、商品が欠品していた時間帯に近いほど、商品の販売実績を優先して用いる。これにより、欠品による商品の販売機会を逃した場合の損失の推定の精度をより一層高めることができる。
また、損失推定システムは、商品が欠品していた時間帯の販売実績を、商品が欠品していなかった時間帯の販売実績を用いて補完する場合、商品が欠品していた時間帯よりも後の時間帯の商品の販売実績に比して、商品が欠品していた時間帯よりも前の時間帯の商品の販売実績を優先して用いる。これにより、欠品による商品の販売機会を逃した場合の損失の推定の精度をより一層高めることができる。
また、実施形態の発注推奨システムは、商品の内容量ごとの販売実績に基づく販売数を最も数値の近い整数値に換算し、換算した整数値に対して商品の内容量を積算することで、商品の内容量ごとの販売量の換算値を計算し、商品の内容量ごとの販売実績に基づく販売量の換算値の合算値との差が小さくなるように、発注推奨量を補正する。これにより、発注推奨量の算出の精度を高めることができる。
また、発注推奨システムは、商品の内容量ごとの販売量の換算値の合算値が、補正対象の発注推奨量よりも小さい場合には、その差分よりも少量の商品の内容量を対象として、販売量の換算値を増大させ、増加させた後の商品の内容量ごとの販売量の換算値の合計値を補正した発注推奨量とする。これにより、発注推奨量の算出の精度を高めることができる。
また、発注推奨システムは、商品の内容量ごとの販売量の換算値の合算値が、補正対象の発注推奨量よりも小さい場合において、その差分が商品の内容量の最小値よりも小さい場合には、販売量の換算値を増大させずに商品の内容量ごとの販売量の換算値の合計値を補正した発注推奨量とする。これにより、発注推奨量の算出の精度をより一層高めることができる。
また、発注推奨システムは、商品の内容量ごとの販売量の換算値の合算値が、補正対象の発注推奨量よりも大きい場合には、補正対象の発注推奨量を増大させ、増大させた発注推奨量を補正した発注推奨量とする。これにより、発注推奨量の算出の精度をより一層高めることができる。
また、実施形態の発注推奨システムは、商品を発注する時点において、納品タイミングにおける商品の予測在庫数を納品タイミングにおける基準在庫数から減算することにより納品タイミングにおける基準在庫数に対する不足数を計算し、さらに、納品タイミングにおける基準在庫数に対する不足数に対して、納品タイミングから、次回発注の納品タイミング、および、今回発注する商品の販売期限が満了するタイミングのうち早いタイミングまでの間の期間の、商品の予測需要数を加算して、発注推奨量を算出する。これにより、発注推奨量の算出の精度を高めることができる。
また、発注推奨システムは、納品タイミングにおいて販売期限が満了していない条件の納品済商品の在庫数に、納品タイミングにおいて販売期限が満了していない条件の納品タイミングまでに納品する予定となっている商品の数を加算し、納品タイミングまでの商品の予測需要数を減算することで、納品タイミングにおける商品の予測在庫数を算出する。これにより、発注推奨量の算出の精度を高めることができる。
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれると同様に、特許請求の範囲に記載された発明とその均等の範囲に含まれるものである。