カフェの成功予測演習
はじめに:今回のゴール
皆さん、こんにちは! この演習では、カフェの店舗データ(cafe_train.csv)を使って、「お店が成功するかどうかを予測するAI(機械学習モデル)」を一緒に作っていきます。
全体の流れは以下の通りです。
- 準備: データをGoogle Colabに読み込む
- 探索: データの中身をグラフで見て、特徴を掴む
- 準備: データを機械が学習できる形に整える(前処理)
- 学習: モデルにデータを学習させて、賢くする
- 評価: モデルがどれくらい賢くなったか、実力を試す
各ステップで課題を用意しました。頑張って解いていきましょう!
ステップ1:準備 - Colabにデータを読み込む
まずは、分析の舞台であるGoogle Colaboratory(Colab)を準備し、データを読み込みます。
Colabを開き、ファイルをアップロード
- Google Colabを開き、新しいノートブックを作成します。
- 画面左のフォルダアイコンをクリックします。
- 「アップロード」アイコンを押し、先生から受け取った3つのファイル (
cafe_train.csv,cafe_test.csv,cafe_test_answers.csv) をすべてアップロードしてください。
課題1:データをプログラムに読み込む
課題:
pandas ライブラリを pd という名前でインポートし、cafe_train.csv ファイルを読み込んで train_df という名前のDataFrameに格納してください。その後、head()メソッドを使って最初の5行を表示し、データが正しく読み込めたか確認しましょう。
ヒント:
pd.read_csv('ファイル名') を使うと、CSVファイルを読み込めます。
ステップ2:探索 - データの中身をグラフで見てみよう
いきなりモデルを作るのではなく、まずはデータがどんなものかを知ることが大切です。これを**探索的データ分析(EDA)**と呼びます。
課題2:データの健康診断
課題:
train_df の info() メソッドを使って、データの型や欠けている部分(欠損値)がないか確認してください。どの列に欠損値がありますか?
課題3:グラフで特徴を掴む
課題:
seabornライブラリのcountplot を使って、「出店エリア(area)」と「成功(success)」の関係性を可視化する棒グラフを作成してください。グラフのタイトルも付けてみましょう。
ヒント:
seaborn と matplotlib.pyplot をインポートするのを忘れないでください。countplotの引数に x='area', hue='success', data=train_df を指定してみましょう。
ステップ3:準備 - データを機械が学習できる形に整える(前処理)
機械は「文字」や「空欄」を直接理解できません。モデルが学習できるように、データを綺麗な形に整えましょう。
課題4:欠損値を埋める
課題:
manager_experience 列の欠損値を、この列全体の中央値で埋めてください。
ヒント:
- DataFrameの列に対して
.median()を使うと中央値を計算できます。 - 計算した中央値を使って
.fillna()で欠損値を埋めることができます。
課題5:文字を数字に変換
課題:
pandasの get_dummies() 関数を使って、area列の文字データを数値に変換し、不要になった元のarea列を削除(drop)してから、元のtrain_dfと結合(concat)してください。最後に、処理後のDataFrameの最初の5行をhead()で表示して、正しく変換されているか確認しましょう。
補足:
get_dummies()が生成するのは、カテゴリに属するかどうかを示す0と1の値です。これは意味合いとしては「真偽(Boolean)」に近いですが、機械学習モデルはこれを数値として扱います。そのため、ここでは「文字を数字に変換」と表現しています。
ヒント:
- まず、
area列だけをダミー変数に変換し、新しいDataFrame(例:area_dummies)として保存します。(pd.get_dummies(train_df['area'])) - 次に、元の
train_dfから、area列を.drop('area', axis=1)を使って削除します。 - 最後に、
pd.concat()を使って、area列を削除したtrain_dfと、最初に作成したarea_dummiesを横方向に連結します。(pd.concat([train_df, area_dummies], axis=1)) - 一連の処理を終えたDataFrameの
.head()を表示して、area列がなくなり、新しいダミー変数の列が追加されていることを確認しましょう。
ステップ4:学習 - モデルにデータを覚えさせる
いよいよ、予測モデルを作って学習させます。
課題6:「問題(X)」と「答え(y)」にデータを分ける
課題:
train_df_processed から、予測の答えである success 列を y_train に、問題(特徴量)であるそれ以外の列を X_train に、それぞれ分割してください。
ヒント:
DataFrameから特定の列を削除するには .drop('列名', axis=1) を使います。
課題7:モデルを学習させる
課題:
scikit-learn の DecisionTreeClassifier を使って、決定木モデルを学習させてください。モデルのインスタンスを作成し、fit() メソッドで X_train と y_train を使って学習を実行します。
ヒント:
from sklearn.tree import DecisionTreeClassifier で必要なものを取り込みましょう。モデルのインスタンスを作成する際は、random_state=42 を指定して結果を固定すると、他の人と結果を比較しやすくなります。
ステップ5:評価 - モデルの実力を試す
学習したモデルがどれくらい賢いのか、未知のデータ(cafe_test.csv)で腕試しをさせましょう。
課題8:テストデータも同じように前処理する
課題:
cafe_test.csv を読み込み、訓練データと全く同じ手順で前処理を行ってください。
cafe_test.csvをtest_dfとして読み込む。manager_experienceの欠損値を埋める。area列をget_dummiesで数値に変換し、dropで不要な列を削除してからconcatで結合する(課題5と同じ手順)。- 前処理済みのDataFrameを
X_testとして準備する。
課題9:予測と答え合わせ
課題:
学習済みの model を使って X_test の成功予測を行い、その結果を predictions という変数に保存してください。その後、cafe_test_answers.csv を読み込んで実際の答えと比較し、accuracy_score を使ってモデルの正解率を計算しましょう。
ヒント:
from sklearn.metrics import accuracy_score が必要です。モデルによる予測は .predict() メソッドで行います。
お疲れ様でした!これで演習は終了です。モデルの性能はどうでしたか?
次のページでは、モデルを保存について学びます。