https://blog.datarobot.com/jp/ai-in-turbulent-times
[相談事項]
需要大変動下での予測モデル運用方法は、皆様どのように実施されていますでしょうか?
アドバイス・事例をお教えください。
[現状]
一般消費財の需要予測のAIを構築し、事業に本格適用を進めようとしています。
PoCの段階では事業側と定めた目標値はクリアでき、システム化に進む見込みとなっております。
が、まさに今、コロナショックで需要が大幅に乱れており、事業活用開始後にはPoC時に構築した予測モデルでは予測精度は相当低下するのでは?という懸念に晒されております。
しかしそれでも事業へのAI適用は諸々の事情で中止にはできないため、何とかモデルの運用で精度を保てないか?と検討を進めてまいりました。
その中で、上記DataRobotさんのブログも参考にし、「事業が予測をする際に、直前までのデータを学習させることで可能な限り追従させる」という方法でモデル運用を進めようとしております。
が、正直それでも精度追従は厳しいと考えております。
こんな方法で運用しているよ、こういう考え方はどうですか?等あれば是非アドバイスくださいませ。
解決済! 解決策の投稿を見る。
坂本様、こんにちは。ご相談いただきどうもありがとうございます。
モデル構築観点から行くと、不確実な状況においての対策としては
という2つの方向性ですすめるのはいかがでしょうか?当然今まで通りのモデルでは通用しなくなる可能性が高いです。それはなぜなのか?人流の変化や顧客の行動変容によるものであるならばそれらをデータとしてモデルに取り込めるかどうかを検討する必要があると思います。
また、今後の変化に関しては当然不確定な外部要因もあるでしょうから、そのような場合には答えを一つ出すよりも複数のシナリオとして出すのがいいと思います。そうすることで、モデルが完璧な答えを出してくれるのではないという期待値を避けることが出来ますし、人間の知恵を合わせた意思決定ができるようになります。
例えば前述のように、人流による影響が多い時(例えば繁華街にでている人が少ないからビールが売れない、とか)は、将来の人流が、多い場合、少ない場合のシナリオを作り、シミュレーションを行うなどです。なおこのようなシミュレーションを行うときには時系列モデルよりも、時間外検定を行った回帰分析のほうが因子による影響をより正確にモデリングできます。
こちらの「変化に強いモデルの工夫はどのようにしていますか?」でも同様の議論があったので参考に載せておきます。
いくつか多層で考えることも重要かと考えています。
本質に近い因子としては、一般消費財などではよく人口統計なども利用されると思いますが、本質的には「いる人の数」よりもそこで「活動している人の数」が重要かと思います。緊急事態宣言によって人の移動が大きく影響された中で、元々住んでいる地域と働いている地域を結ぶだけでは移動の性質が変わった中では、モデルに大きな影響が出てしまうため、可能であればより本質に近い因子としての人の活動情報(移動情報など)に切り替えてモデリングするのが望ましいかと思います。
上記はデータ再構築から時間がかかる可能性があるので、モデルにまずは前年同日や過去半年間のラグなど過去の情報に頼りすぎる特徴量がどこまで効いていて、それがあまり効かないモデルに現状のデータから作り直せないかを見ていくことは大事だと思います。
次にデータドリフトを見ることも大事ですが、見てから行動だけでなく、仮にこの値がドリフトしたときに予測値はどのように変化するのかというモデルに対してのストレスチェックをしていくことも重要です。
今回も買い溜めによる急な需要もあるでしょうし、逆に需要が極端に落ちるケースもあると思うので、前日の売上がどう変動すると予測にどんな影響が出るのかを見ておくことによってそのモデルの運用で問題がないかの確認は取れます。上に記載した過去データを使いすぎないと直近データを使うの間となりますが、今まで前日ラグで動かしていたのをすごく毎日がブレるようになった場合には、前日ラグを落として、1週間の移動平均などを使うようにするなどして、直近のパニック需要への対応という手も取れます。そして場合によっては、スパイクした値を補正して使用するなども重要になってくると思います。
最後に予測値の上限と下限ですが、こちらはストレスチェックに近い話です。どんな値が来たときにどう予測が出るかを暴れるかを見ることによって、想定していない値が出ないようにルールとして潰してしまう形です。モデルの性質によっては学習データが全て0以上であっても、0未満が出るケースなどはあり、その場合には予測値としては必ず0にするという最後の補正を入れておいてシステムとして許容できない値が飛ばないようにします。
なかなか銀の弾丸のように一つで簡単に解決といかない状況ですが、ドメイン知識と照らし合わせて今入れている特徴量が精度としては過去の学習データでは効いていたが、今の情勢でドリフトしないかと考えてモデルを見直すことが重要となると思います。
アドバイスありがとうございます!
非常に参考になりました。
(シバタさんからの直コメントにやや興奮気味です。)
それぞれコメントさせていただきます。
>影響を与えると思われる要因をできるだけモデルに組み込み、かつ短期的変動にセンシティブなモデルを作る
次の小川様からの返信にも近いかと思いますが、どういったデータが我々の需要予測にどういった影響を及ぼすか、という洞察も必要になる、ということですよね。
率直に申しますと、オープンデータ以外のデータを追加購入するのが難しい状況ではあるのですが、
逆にDataRobot様だとどういったデータを活用されているか?という点でアドバイスをいただけると非常に参考になります。
別途示唆をいただく機会が欲しいです。
>不確定要因に対していくつかのシナリオにおいて予測を行い、最終的にどれを使うか意思決定者が決める
ありがとうございます。
これは例えば、ですが、需要予測に気温が多大な影響を与える予測モデルだった場合、最低気温と最高気温、それぞれで予測をしておき、その先、実際の需要量を決定するのは人の意志、というイメージですよね?
2点お伺いしたいのですが、
・事前に変動要素が高い説明変数を加えておくようにしているのか?
・現時点ではAIの値をそのまま事業活用する、というよりは、AIの値はベンチマーク的に活用する方が多いのか?
前者については、やはり1点目と同じように知見が必要となりますよね?その辺り、是非、案件個別にアドバイスいただきたいな、と思います。
後者については、DataRobot様の肌感で良いのですが、どのように感じてらっしゃいますでしょうか?
後ほど別途トピックを投下させていただこうと思いますが、AIをどのように事業で活用するのか?というのも弊社では重要なテーマなので、世間的な動向が気になります。
>小川さん
ありがとうございます!
1.本質に近い因子をモデルに活用する
これは先のシバタさんの回答にも書かせていただきましたが、いつも小川さんと会話させていただくと「なるほどな」というデータを活用されていることがしばしばあります。
私もデータ分析のキャリアはまだまだ短いので、「●●の予測の時に"本質に近い因子"はコレだ!」みたいなアドバイスをいただく機会をいつかいただきたいです。
2.既存モデルのストレスチェックを行う
これは完全に私の前提情報連携不足なので申し訳なかったのですが、今回の予測は月次単位なんです。。。
それはもう業務的に変えることができない絶対条件になります。
なので、ドリフトが非常にとらえづらく、例えば今でいうと、3月までは平常需要だったのに、突如4月から需要異常が起きる、みたいなことになってしまうんですね。
そういう場合のドリフトのチェックってどうすればいいんでしょうか。。。
3.予測値の上限と下限を設定しておく
これは、ちょっと方向が違いますが、活用済でございました。
例えば、ですが、事業観点で予測ブレ率がxx%だったら、例えば●●費がxx万円になる、みたいな業務設計ができます。
なので今回は、事業が●●費の予算がxx万円だから、目標のブレ率はxx%にしましょう、という形で進めていました。
その上で、色々なパターンで予測をして、ブレ率のMAXとMINと平均を出して、そこからMAXの場合の●●費が予算内に収まるのか?という形で進めていました。
@k.sakamoto さん、
たくさんいろんな因子を見ていくと自体が自分の経験にもなるので、膝を突き合わせたディスカッションを作りたいですね。
月次単位ですと数ヶ月間の移動平均、前月ラグは同じように入っていると思うので、そこは同じようにテストしていただくか、抜いてそもそも月ごとでは急な変化に対応できないことから別の特徴量に置き換えるのも視野にいれたほうがいいかもしれません。
あとは月内の祝日の日数とか入っている場合にも注意いただきたいと思います。もう始まっていますが、gwとかは実際には人が移動する流れ、イベントに参加するという過程で消費に繋がると思いますが、gwという日程そのものには意味はありません。今の期間に限って言うとイベントフラグ系は学習データではあったとしても、予測ではないものと扱ったほうが良いかもしれません。
すでに予測値を業務に落とし込んでの利用をされているというのは素晴らしいと思います。
突然横から失礼します。
すでに活発な議論が行われている背景から、別観点で述べさせて頂きたいと思います。
コメントを拝読するに、
という状況と理解しました。
すでにモデル構築済みということで、本質的な変数が採用出来ているか?の再点検という意味で、
ポーターの5フォース
を使って、
売上という現象を再度、要因分解し、各要素に対応する変数をモデルに採用できているか?を点検する
というアプローチはいかがでしょうか?
例えば、医療・衛生用のマスクでいえば
といった具合に、サプライチェーンを分解します。
分解した要素に対応し、かつ、入手可能なデータや指標があれば、モデルへの変数追加検討に役立ちます。
仮に、モデルに変数を追加しなかったとしても、そういったデータが手元にある状態でのAI運用は、
トラブル時のビジネスの回復性を高めてくれるはずです。
面倒かもしませんが、市場が混乱し、サプライチェーンが混乱している時であればあるほど、
5Fの各要素が、まるで生き物のように日々変化します。
よって、このような状況にこそ、フレームワークによる要因分解と本質的な変数の洗い出し・点検が
安全なAI運用に不可欠と考えています。
長文になりましたが、少しでもお役に立てれば幸いです。
とてつもなく激しい市場変動下ではありますが、同じくAIのビジネス適用の担う一人として、本番運用どうかうまく行きますよう。
お祈り申し上げます。
@ShinichiroOhno -san
素晴らしいアドバイスありがとうございます!
まさに今、予測モデルの運用時に「どういった原因で予測がブレてきているのか?を調査する軸」を検討しておりました。
我々が扱っている商材も、アドバイスいただいたポーターの5フォースで非常に機微に変化するものであるため、参考になります。
次は我々が扱っている商材のSCMを分解すると何に着目すべきか?を考えてみたいと思います。
ただ問題は、着目点に気づけたとしても、そのデータが入手できるかどうか、が課題ですね。。。
まさにそこについては、今新たな活動をし始めようとはしているのですが、壁と距離が遠いです。。。
坂本さん、こんにちは。
実は、ドメイン知識を有効に活用する事が今のような大変動下では非常に重要だとの思いから「要因分析におけるドメイン知識整理の重要性」なるブログを書きました。特性要因図(フィッシュボーンチャート)を利用した「CNX分析」や、それに基づくPF/CE/CNX/SOPアプローチなどはもしかしたらご参考になるかもしれません。
長年品質管理の世界で使われてきたいくつかの手法を解説していますのでよろしければご笑覧ください。
伊地知さん ありがとうございます!
そして例の会以来でご無沙汰しております。
とても参考になりました!笑覧なんてとんでもないです。
要因分析のフレームワークとして是非検討していきたいと思います。
ちょうど昨日、御社と上記についてMTGをさせていただき、まさに仰っていただいたようなアドバイスをいただきました。
基本的には我々が策定したモデル運用は問題ないが、モデル精度に問題が出た場合の対処として、事前に業務知見から「こういう異常理由が考えられる」「事前に想定している異常理由の場合のリアクションは検討しておくべき」といった、もう少しブレイクダウンして決めておくべきことがある、とのことでした。
やはりこのご時世、分野によっては構築した予測モデルをそのまま使うというのは難しいので、いかに運用でカバーできるか?も重要だなと再認識させていただきました。
また、別の話として、モデル精度維持が難しいのであれば、可能な限り予測モデルはフレキシブルに変更できる(説明変数も)モデル構築方法も考えておくというのも一案、という話もいただきました。
システムとして業務にAIを組み込んでしまうと、一度決めたデータを変更するのはかなりの労力になるので、現状は難しい、という回答もさせていただき、ご理解いただけたのですが、 個人的な意見としては、需要予測みたいなAIは、システマチックに作らない、簡易システムとして提供しておいて、ご提案いただいたような形で事業部に展開するのもアリなのかなぁとも思っていたりします。
ただ、会社の規模が大きくなればなるほど、SLAや運用担当などを考えないといけなくなるので、違う壁が出てくるのですが。。。
AIの運用は難しいですね。。。