こんにちは。アポロ株式会社でデータサイエンティストをしている八子です。
今回は、私が直近で取り組んだ 輸入青果の需要予測プロジェクト の中で、特に注力した 誤差要因分析 について書いていきます。
案件の背景
クライアントさまは、海外産青果の輸入から追熟、量販店への出荷までを一貫して手がける企業です。
海外から運ばれてくる多くの果物は、食べられる状態では輸入できません。そのため、青い状態で輸入された果物は、店頭に並ぶ前に、エチレンガスが充満した部屋で5〜7日ほど追熟し、食べごろの状態にしてから出荷されます。
しかし、この追熟を加味した販売計画を立てるのが大変です。
まず、一度追熟を始めると途中で停止することが出来ないため、長期間在庫しておくことができません。なので、計画ミスは廃棄や欠品に直結してしまいます。
さらに、「青めの状態で店頭に並べたい」「食べごろの熟度で並べたい」など、量販店によって求める熟度も異なるため、それらに応じた適切な販売計画を立てる必要があります。
そのため、販売計画業務には膨大な工数がかかっていました。 これを解消するため、販売計画を最適化するAIの構築を目指すことになり、その最初の一歩として、需要予測モデルの構築に取り組みました。
アプローチ
構築したAIモデルの概略は、図のようになっています。
一般的には、説明変数の検討などに時間をかけることが多いように思いますが、この案件においては、それ以外の要素も重要でした。
いくつかポイントを挙げると、、、
- 「需要のまとまり」粒度で予測し、業務で必要となる粒度に後で按分する
1房200円のバナナがフィリピン産でもベトナム産でも、ほとんどの人は気にならないですよね?どちらが多く出荷されるかは、供給側の都合で変わってしまうはずで、対処が必要でした。
- 「AIの苦手」を取り除く
よく言われている、「決定木系のモデルは水準変化に弱い」「特需の混入により予測が振れる」など、AIの性能を下げてしまうようなデータの動き方への対処が必要でした。
- 特売日への対応
「特売」とは、クライアントさまが量販店に対して納める価格(納価)を下げて販売することを指します。出荷数量が大きく増加するため、予測誤差が出やすくなります。
これが曲者でして、、、今回お話したいことです。
初期モデル構築後に残った課題
初期モデル構築段階では、対象を「典型的な」量販店に絞ってモデル構築し、高い精度を実現することができました。
ところが、対象となる量販店を広げてみると、精度が低い。これはどうしてだろう・・・
原因を把握しないと手の打ちようがないため、誤差が大きいところを中心に、約数千ある、全量販店 × 全カテゴリの予測カーブを、出荷実績・販売計画・予測値の3本の線をひたすら見比べてみました。
そして、誤差が大きいところで何が発生しているのか?いろいろなデータと見比べながら考えました。
すると、誤差が生じるパターンが見えてきたました。というのも、、、、特売フラグが実態と合っているようには見えない!特売フラグが立っているのに全く出荷されていない日や、反対にフラグがないのに異様に出荷されている日がある。
わかったこと
誤差のパターンを整理したうえでクライアントさまと話してみると、やはり特売フラグが実態とあっておらず、それにはいくつか原因があることがわかりました。
- 忙しすぎて入力しない
特売フラグはないのに出荷数量が増えている日があり、そのような日は納価が安くなっていた。
特売フラグが立っていない理由としては、日々忙しい営業担当者が更新できていなかったためであった。
このような日の予測精度をあげるために、特売フラグを価格に応じて付与しました。
当たり前すぎることは、入力されない
たくさん売れる日に規則性があるケースがあった。「毎週火曜が特売」「月初の数日が特売期間」etc…
営業担当者の話を聞くと、定期的に特売をやっていたが、担当者からすると当たり前のことになっており、入力されなかった。
そこで、その量販店が持つ「規則性」を検出して特売扱いとしました。
特売自体にも成功・不成功がある。
特売をしているはずなのに、全然出荷が伸びていない日があった。
よく見ると、その多くが 連続する特売の2日目以降 。
連続する特売の2日目以降は、たとえ特売をしていても売上が伸びづらいと考え、通常日として扱いにしました。
そもそも、営業担当者は数字を知っている。
営業担当者が立てた販売計画が、実態と異様に近い(近すぎる)日があり、実は営業担当者が量販店との商談で握った数字だった。
このような情報は人しか知り得ないので、AIで予測するのは不適切だと考え、商談で握った数字は人間が入力、それ以外の需要はAIが予測することとしました。
これらの対応により、最終的には、営業担当者が作成した販売計画を上回る精度を実現できました。ポイントは、誤差要因を徹底的に調べたという点でした。方法としては、「規則性を見つける」こと、「偶然ではありえないことに注目」すること、「データ生成のメカニズムに立ち返って考える」ことなどが有効でした。
まとめ
精度向上において、有効だった考え方は下記の3つです。
① 誤差が大きいところに注目せよ。
精度改善の糸口は、うまくいっている箇所ではなく、誤差が大きい箇所に隠れている。
② 誤差が生じる原因を徹底的に考えよ。精度改善策はそのあと。
「どう直すか」より先に「なぜ外れたか」を突き詰めることが、本質的な改善につながる。
③ 4つの方法で誤差が生じる原因を調べよ。
規則性を見つける/偶然ではありえないことを見つける/データ生成のメカニズムに立ち戻る/分からなければ有識者に聞く
ここまで読んでいただきありがとうございました。
ぜひ、いいねを押していただけると励みになります🐈
また、アポロでは新たなメンバーを募集しています。皆さまのご応募お待ちしております!
