明日、おにぎりは何個売れるか
あるコンビニチェーンでは、毎日、店長がおにぎりを発注します。
多すぎると売れ残り、少なすぎると売り切れます。ベテランの店長は、天気や曜日を見て、だいたいの数が分かります。
では、その勘をコンピューターに任せることはできるでしょうか。このレッスンでは、過去の記録から数を予測するしくみを見ていきます。
このレッスンのゴール
メモ
モデルが例からどのように学ぶかを、説明できる。
キーワード
| ことば | いみ | れい |
|---|---|---|
| 機械学習 | 例からパターンを見つける方法です。 | |
| モデル | 見つけたパターンを使って予測するしくみです。 | |
| 特徴量 | 予測の手がかりになる情報です。 | 天気、曜日 |
| 正解ラベル | 予測したい答えの、本当の値です。 | 売れた個数 |
| 学習 | 例を見て、モデルを調整することです。 | |
| 予測 | 新しい入力に対して、モデルが出す答えです。 |
学生が入力するセルは、このプレビューでは空白です。
ルールを書くか、例から学ぶか
ふつうのプログラムでは、人がルールを書きます。たとえば「雨なら80個」と、決まった数を書いておきます。
機械学習では、ルールを人が書きません。過去の記録をたくさん渡して、コンピューターにパターンを見つけさせます。
そのパターンをまとめたものが、モデルです。
二つのやり方のちがい
| ふつうのプログラム | 機械学習 | |
|---|---|---|
| ルールを決めるのは | 人 | コンピューター |
| 人が渡すもの | ルール | 過去の例 |
| できあがるもの | プログラム | モデル |
| 向いている仕事 | 手順がはっきりしている | 手順を言葉にしにくい |
学生が入力するセルは、このプレビューでは空白です。
例は、手がかりと答えでできている
学習に使う一件一件の記録を、例と呼びます。
例には、二種類の情報が入っています。一つは、予測の手がかりになる特徴量です。天気や曜日がそうです。
もう一つは、予測したい答えの本当の値で、正解ラベルと呼びます。ここでは、実際に売れた個数です。
例: ある店の過去の記録
| 日付 | 天気(特徴量) | 曜日(特徴量) | 売れた個数(正解ラベル) |
|---|---|---|---|
| 6月3日 | 晴れ | 月 | 130 |
| 6月4日 | 雨 | 火 | 80 |
| 6月5日 | 晴れ | 水 | 120 |
| 6月6日 | くもり | 木 | 100 |
| 6月7日 | 雨 | 金 | 70 |
| 6月8日 | 晴れ | 土 | 125 |
学生が入力するセルは、このプレビューでは空白です。
よくある誤解
注意
モデルは、例にないことも知っていると思われがちです。実際には、渡された例の中のパターンしか知りません。雪の日の記録が一つもなければ、雪の日の予測はできません。予測したい場面の例があるかを、まず確かめましょう。
先に学び、あとで予測する
機械学習の流れは、二つの段階に分かれます。
最初は学習です。モデルは例を見て、天気と個数の関係をつかみます。
次は予測です。明日の天気を入れると、学んだ関係から個数を答えます。
下のコードは、とても簡単なモデルです。同じ天気の日の平均を、予測にしています。
やってみよう: 平均で予測する
# コンビニ1店舗の、過去6日分の記録です。
# 変数名は、現場の習慣に合わせて英語で書きます。
weathers = ["晴れ", "雨", "晴れ", "くもり", "雨", "晴れ"]
sales = [130, 80, 120, 100, 70, 125]
tomorrow = "晴れ"
# 明日と同じ天気の日だけを集めて、平均を出します。
total = 0
count = 0
for i in range(len(weathers)):
if weathers[i] == tomorrow:
total = total + sales[i]
count = count + 1
print("使った例:", count, "日分")
print("明日の予測:", total / count, "個")
# tomorrow を "雨" に変えて、もう一度実行しましょう。