AIの基礎・活用
AIに手がかりを全部入れれば、予測は良くなる?
手がかりを足すほど、過去の記録にはよく合うようになります。けれども記録の数に対して項目が多すぎると、AIは偶然の重なりまで覚え、新しい日には外れやすくなります。これを過学習と呼びます。項目は多さより、学習に使っていない期間で成績が上がるかで選びます。
この記事でわかること
- 過学習とは、学習に使った記録には合うのに、新しいデータではうまく予測できない状態です。scikit-learnの公式資料は、記録に含まれる偶然のばらつきまで覚えてしまうことだと説明しています。
- 反対に、仕組みが単純すぎて学習に使った記録にも合わない状態を学習不足と呼びます。どちらも、学習に使った期間と使っていない期間の成績を並べると見分けられます。
- 記録の件数に対して項目が多いと、過学習が起きやすくなります。半年分の来客数に30項目の手がかりを入れるような場合です。
- 対処は、項目を絞る、仕組みを単純にする、記録を増やす、の組み合わせです。項目を足すときは、足す前と後で学習に使っていない期間の成績を比べてから決めます。
手がかりを足すほど、過去には合うようになる
売上や来客数を予測するAI(機械学習)は、過去の記録と、その日の天気や曜日などの手がかりを並べて、両者の関係を学びます。手がかりを増やすほど、AIが過去の記録を説明できる材料は増えるので、学習に使った期間の予測は実績に近づいていきます。
問題は、過去の記録には説明できる傾向だけでなく、その日にたまたま起きたことも混ざっている点です。機械学習の道具として広く使われるscikit-learnの公式資料(Underfitting vs. Overfitting)は、AIが学習に使ったデータの偶然のばらつき(ノイズ)まで覚えてしまう状態を過学習(オーバーフィッティング)と呼んでいます。
同じ資料の交差検証の説明は、学習した記録の答えを繰り返すだけのAIでも、同じ記録で試せば満点になる一方、まだ見ていないデータでは役に立つ予測ができないと書いています。過去にぴったり合っていることは、それだけでは来週も合う理由になりません。この記事で扱うのは自社の記録から学ぶ予測や判定のAIで、文章を作る生成AIとの違いは機械学習と生成AIは何が違う?で説明しています。
点を全部通る線は、本当の形から外れる
先のscikit-learnの資料には、過学習を目で見て分かる例があります。なめらかな曲線の上に、少しずつばらつきを加えた30個の点を置き、その点に合う線を3通りの複雑さで引いてみる例です。
いちばん単純な直線は、曲がった形を表せず、点にも本当の曲線にも合いません。資料はこれを学習不足(アンダーフィッティング)と呼んでいます。ほどよく曲がれる線は、本当の曲線とほぼ重なります。いちばん自由に曲がれる線は、30個の点にはほぼぴったり合わせる代わりに、本当の曲線からは外れてしまいます。
同じ資料群の検証曲線の説明は、この3本目を、学習に使ったデータには完全に合うが本当の形にはよく合わず、データが少し変わるだけで大きく変わる状態だと説明しています。手がかりの項目を増やすことは、線が曲がれる自由を増やすことに近く、増やしすぎると3本目に近づきます。
店の記録で起きると、こうなる
次は当社が想定した例で、実際の相談事例ではありません。開店から半年、約180日分の来客数の記録がある飲食店が、予測に使う手がかりを思いつく限り入れたとします。
入れた手がかり
曜日、祝日、天気、最高気温、降水量、風の強さ、近くの会場のイベント、給料日、SNSの投稿への反応の数、テレビでの紹介、学校の行事など、30項目。
記録に残っていた偶然
ある雨の水曜日、たまたま団体のお客さんが入り、来客数がいつもの倍になった。180日の中で「雨」「水曜」「気温が低い」「給料日の前日」が重なったのはこの日だけだった。
AIが覚えたこと
項目が多いと、AIはこの1日を説明するために「雨で寒い水曜の給料日前日は混む」という傾向を作れてしまいます。次に同じ条件が重なった日、AIは多めに予測するおそれがありますが、団体のお客さんがまた来る理由はありません。
記録の件数に対して項目が多いと、起きやすい
scikit-learnの決定木の説明は、決定木という仕組みについて、項目の数が多いデータでは過学習が起きやすく、記録の件数と項目の数の比率をちょうどよく保つことが大切だと書いています。決定木に限らず、記録が少ないのに項目が多いと、たまたま一度だけ重なった条件の組み合わせが増え、それを傾向として覚えやすくなります。
店や小さな会社の記録は、1日1行なら1年でも365行です。大企業の何年分もの記録と比べると、同じ数の項目でも過学習が起きやすいと考えておきます。小さな店ほど、手がかりは少なく始めるのが当社の考えです。何年分の記録で何が分かるかは需要予測に必要なデータ期間で説明しています。
項目の中には、予測を出す時点ではまだ分からないものもあります。翌日の予測に翌日の実際の天気を使う、のような使い方は、過学習とは別に試験の成績を良く見せてしまいます。この点はAIの「精度95%」は何を表している?で取り上げています。
見分けるには、2つの成績を並べる
過学習かどうかは、学習に使った期間の成績と、学習に使っていない期間の成績を並べると分かります。scikit-learnの検証曲線の説明は、次の3通りに分けています。
日付のある記録では、試す期間を学習した期間より後に置きます。同じ資料の交差検証の説明は、日付の近い記録どうしは似やすいため、日付を無視して記録を混ぜて分けると成績を正しく測れず、学習に使った期間から見て「未来」の記録で試すことが大切だとしています。
両方とも低い
学習不足です。手がかりが足りないか、仕組みが単純すぎます。曜日や祝日のような基本の項目が入っているかから確かめます。
学習した期間だけ高く、使っていない期間は低い
過学習です。項目が多すぎるか、仕組みが複雑すぎます。過去にはぴったり合うグラフを見せられたときほど、こちらの数字も見せてもらいます。
両方とも同じくらいに高い
うまく学べている状態です。それでも、店の状況が変われば結果はずれていくので、学び直しの考え方はAIは使っているうちに勝手に賢くなる?を参考にしてください。
項目を絞る、単純にする、記録を増やす
過学習を防ぐ方法として、scikit-learnの資料にはいくつかの手段が挙がっています。開発する側が選ぶ方法ですが、頼む側も考え方を知っておくと、提案の中身を聞きやすくなります。
項目を絞る
項目の選び方の説明は、項目を選んで減らすことが成績を上げる方法の一つだとしています。入れた項目のうち、どれが成績に効いているかを確かめ、効いていないものは外します。
仕組みを単純にする
決定木の説明は、木の深さを制限する、1つの判断に最低何件の記録が必要かを決める、といった方法を挙げています。1件や2件の記録だけで判断を作らせないための設定です。
記録を増やす
学習に使った期間の成績と使っていない期間の成績の差が大きいときは、記録を増やすと使っていない期間の成績が上がる見込みが高いと資料は説明しています。両方とも低いままのときは、記録を足してもあまり伸びないとしています。
手がかりを足したくなったら、試してから決める
「イベントの情報も入れたら良くなるのでは」と思いついたら、それ自体は良い発想です。入れるかどうかは、入れる前と後で、学習に使っていない期間の成績がどう変わったかを見て決めます。良くならないなら、その項目は今の記録の量では役に立っていないということなので、外しておきます。
団体予約や臨時休業のように、理由が分かっている特別な日は、記録にひと言メモを残しておくと、AIが偶然を覚え込む前に扱いを決められます。特別な日の直し方は売上データは発注の目安にそのまま使えるかで紹介しています。
提案や製品の説明で「多くのデータを使っているので精度が高い」と言われたときは、項目の数と記録の件数、学習に使っていない期間の成績を聞いてみてください。項目が多いこと自体は、予測が良い理由にはなりません。
どの手がかりを使うか、記録を見ながら一緒に決めます。
予測に何を入れればよいか分からない、提案された項目の数が多すぎる気がする。そんな段階でも相談できます。データの提出は要りません。どんな数字を予測したいか、手元にどんな記録があるかを伺い、最初に試す項目と、効いたかの確かめ方を一緒に整理します。
