こんにちは。Mocal designの佐藤です。
これまでの当ブログ記事で機械学習を用いた時系列分析、クラスタリング、分類について簡単に説明してきました。
弊社では主に商店や中小企業のクライアント様への分析サービスも行います。
その場合、最低数百~数千のデータをご用意いただくことをお願いしていますが、数百~数千個のデータとは言え、すぐ分析で使える形のデータを収集されている商店様や企業様は意外と少ないものです。
たとえば①天気、②最低気温、③最高気温から来年の④お弁当の売上、⑤客数を予測したいというとき、3年分(約1,000日分)の①~⑤学習データが準備してあればすぐに分析に取り掛かれます。
本日は以下について説明しましょう。
・過学習
・k-分割交差検証(クロスバリデーション)
まずは過学習から説明します。
過学習
さて、皆さんはあるお弁当屋さんで働きはじめたとしましょう。
上司である店長からこんなことを頼まれました。
店長「来月から食材の発注はキミに任せた!先月退職した主婦のパートさんが書き残した過去1年分のノートと発注書を参考に頼んで!」
そのお店には発注担当のベテランパートさんがいらっしゃいましたが、先月ご主人の仕事都合で遠方に引っ越したのです。
渡されたノートと発注書を見ながら勘に頼って発注したいところですが、それでは面白くありません。
ノートと発注書にある過去1年分のデータを入力して、売り上げの予測ができるモデルを作ってみることにしましょう。
パートさんの残したノートには年度、月、日、曜日、天気、気温、近所のイベント、売れた弁当の個数、廃棄した食材数などのデータが書き残されています。
「20xx年10月10日(土)町内会の運動会あり。販売点数は唐揚げ弁当106個、シャケ弁当63個、焼肉弁当…個。廃棄ロスは…個。本日は唐揚げを300個、シャケを…個発注。」
「20xx年10月11日(日)老人会のカラオケ大会あり。販売点数は幕の内弁当41個。唐揚げ弁当…個。廃棄ロスは…個。本日は唐揚げを…個発注。」
それを確認して「パートのおばちゃん代理アルゴリズム」を作るのです。
そうするとこのようなことがわかってきます。
① 台風の次の日はコロッケが通常の〇倍売れる。
② 〇度を超えると梅のトッピングのお弁当が通常の〇倍売れる。
③ 冬はシャケ弁に入ったシャケの廃棄ロスが他の季節より〇倍多い。
④ 老人会がある3日前には幕の内弁当の材料を〇セット発注する。
⑤ ・・・
⑥ ・・・
⑦ ・・・
⑧ ・・・
⑨ ・・・
⑩ ・・・
あなたは3日3晩寝ずに、1年分のデータを入力して作ったアルゴリズムを店長にみてもらいました。
あなた「店長、できました!このアルゴリズムを使って予測しましょう」
店長「おー!仕事ができるね。よし、これからはこのアルゴリズムを使おう」
あなた「店長、ありがとうございます!」
店長「よし、早速入力してみるね。5日後の日曜は天気予報によると天気は晴れ、最高気温21度、最低気温13度。休日だけど、町内のイベントは特になし。この日売れるお弁当の数は・・・」
あなた「・・・」
店長「だめだこりゃ、使えねえ」
店長はパートさんが残した1年分のノートや発注書の他に、過去3年分の売上や客数といったPOSデータを持っています。
店長「過去3年間に、この条件に似た日が5日もあったから予測結果と照らし合わせてみたけど、実際は5件中2件しか当たっていないよ」
せっかく徹夜して作ったモデルでしたが、3年分の天気、気温、曜日のデータを5件分当てはめてみると、その条件で合致した売上や販売点数は2件だけ。
残り3件は大失敗に終わりました。
ちなみに、あなたがアルゴリズムを作るために入力した1年分のデータを「学習データ」。
店長が過去の天候を入力した過去のデータを「テストデータ」と言います。
つまり今回のアルゴリズムは、過去1年分の学習データを入力した条件にはあてはまりますが、2年前、3年前のテストデータを入れると当てはまりません。
実はこれが今回サブタイトルにもある過学習という状態です。
過学習はどうして起こるかと言うと
① 学習データが足りないから
② テストデータに対してアルゴリズムが複雑すぎる
という理由2点が原因で起こります。
①学習データが足りないから
これをお弁当屋さんの例えで説明すると、最初から3年分のデータを入力していれば店長にとって「使えるアルゴリズム」になっていたはずです。
続いて②
② テストデータに対してアルゴリズムが複雑すぎる
も説明しましょう。
そのお弁当屋さんが40年間営業しているとします。
創業から40年分のデータを入力したアルゴリズムを作るとしましょう。
当然バブル時期、または今と違って近くに競合店が少なかった時の売上も入力します。
その他、災害などで一時的に売上が大きく減少した時のデータも入れました。
たくさんのデータを学習しているので精度の高いアルゴリズムと思いきや、近い将来を予測するには過去3年分のみ入力したアルゴリズムのほうが正しい結果を導くことがあります。
店長「やっぱり大切なのは経験と勘だな」
あなた「いや、店長。もう少し考える時間をください。」
店長「いいよ、何か策があるの?」
あなた「・・・あります。ク、クロスバリデーションです!!!」
店長「うわ、何それ!?強そうな必殺技!!!」
少し難しい話になりますが、最後にk-分割交差検証(クロスバリデーション)を説明しましょう。
k-分割交差検証(クロスバリデーション)
過学習を回避する方法としてk-分割交差検証と呼ばれるものがあります。
k-分割交差検証は、学習データを分割して、一部を学習データ、残りを仮のテストデータとして使うことで、解析の妥当性を検証する方法です。
たとえば、お弁当屋さんに過去5年分の学習データがあるとしましょう。
5年前、4年前、3年前、2年前、1年前とデータを5個に切り分けて、そのうち4年分を学習データとして使い、残りの 1年を仮のテストデータとして検証するものです。
1回目の検証 5年前がテストデータ(仮) 4、3、2、1年前を学習データ
2回目の検証 4年前がテストデータ(仮) 5、3、2、1年前を学習データ
3回目の検証 3年前がテストデータ(仮) 5、4、2、1年前を学習データ
4回目の検証 2年前がテストデータ(仮) 5、4、3、1年前を学習データ
5回目の検証 1年前がテストデータ(仮) 5、4、3、2年前を学習データ
検証作業をすべての組み合わせに対して行いましょう。
これを行うことにより、どのテストデータが最適なのか妥当性を調べることが可能となります。
k-分割交差検証を行うことで、学習データしか手元にない状況であっても、「過学習」しない汎化性能(未知のテストデータに対する識別能力)の高いモデルを選ぶことができるのです。
あなた「店長これでどうでしょうか?」
店長「おー、凄い!やっぱり勘や経験に頼るばかりじゃいけないよね!」
あなた「・・・」
以上、本日は過学習について簡単にご説明いたしました。
冒頭で説明した通り、当社では機械学習をつかった売上予測やキャンペーン予測などを行っています。
具体的に当社では機械学習を用いた分類を
・numpy (数値計算のライブラリ)
・Pandas(データ解析を支援するライブラリ)
・Matplotlib(グラフを描くライブラリ)
・scikitlearn(クラスタリング、回帰、次元削減、分類に使うライブラリ集)
などを使って行います。
「天気予報から未来の売上を予測してみたい」
「顧客の特徴をつかんで販促キャンペーンの効果がある方にだけ、ダイレクトメールを送りたい」
「話だけ聞いてみたい」
という方はビデオサービスZOOMを使って20分の無料コンサルをすることができますので、是非ホームページのCONTACTページからお問い合わせください
(通常コンサルは30分5,000円です)。
小平でホームページ制作、経営コンサルティング
mocal design 佐藤 大樹
東京都小平市南町1-27-10
✉ info@ofb.jp
☟トップページはこちらから