Skip to main content

カフェの成功予測演習

はじめに:今回のゴール

皆さん、こんにちは! この演習では、カフェの店舗データ(cafe_train.csv)を使って、「お店が成功するかどうかを予測するAI(機械学習モデル)」を一緒に作っていきます。

全体の流れは以下の通りです。

  1. 準備: データをGoogle Colabに読み込む
  2. 探索: データの中身をグラフで見て、特徴を掴む
  3. 準備: データを機械が学習できる形に整える(前処理)
  4. 学習: モデルにデータを学習させて、賢くする
  5. 評価: モデルがどれくらい賢くなったか、実力を試す

各ステップで課題を用意しました。頑張って解いていきましょう!

ステップ1:準備 - Colabにデータを読み込む

まずは、分析の舞台であるGoogle Colaboratory(Colab)を準備し、データを読み込みます。

Colabを開き、ファイルをアップロード

  1. Google Colabを開き、新しいノートブックを作成します。
  2. 画面左のフォルダアイコンをクリックします。
  3. 「アップロード」アイコンを押し、先生から受け取った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_dfinfo() メソッドを使って、データの型や欠けている部分(欠損値)がないか確認してください。どの列に欠損値がありますか?

課題3:グラフで特徴を掴む

課題: seabornライブラリのcountplot を使って、「出店エリア(area)」と「成功(success)」の関係性を可視化する棒グラフを作成してください。グラフのタイトルも付けてみましょう。

ヒント: seabornmatplotlib.pyplot をインポートするのを忘れないでください。countplotの引数に x='area', hue='success', data=train_df を指定してみましょう。

ステップ3:準備 - データを機械が学習できる形に整える(前処理)

機械は「文字」や「空欄」を直接理解できません。モデルが学習できるように、データを綺麗な形に整えましょう。

課題4:欠損値を埋める

課題: manager_experience 列の欠損値を、この列全体の中央値で埋めてください。

ヒント:

  1. DataFrameの列に対して .median() を使うと中央値を計算できます。
  2. 計算した中央値を使って .fillna() で欠損値を埋めることができます。

課題5:文字を数字に変換

課題: pandasget_dummies() 関数を使って、area列の文字データを数値に変換し、不要になった元のarea列を削除(drop)してから、元のtrain_dfと結合(concat)してください。最後に、処理後のDataFrameの最初の5行をhead()で表示して、正しく変換されているか確認しましょう。

補足: get_dummies() が生成するのは、カテゴリに属するかどうかを示す 01 の値です。これは意味合いとしては「真偽(Boolean)」に近いですが、機械学習モデルはこれを数値として扱います。そのため、ここでは「文字を数字に変換」と表現しています。

ヒント:

  1. まず、area列だけをダミー変数に変換し、新しいDataFrame(例:area_dummies)として保存します。(pd.get_dummies(train_df['area']))
  2. 次に、元の train_df から、area 列を .drop('area', axis=1) を使って削除します。
  3. 最後に、pd.concat() を使って、area列を削除した train_df と、最初に作成した area_dummies を横方向に連結します。(pd.concat([train_df, area_dummies], axis=1))
  4. 一連の処理を終えたDataFrameの .head() を表示して、area 列がなくなり、新しいダミー変数の列が追加されていることを確認しましょう。

ステップ4:学習 - モデルにデータを覚えさせる

いよいよ、予測モデルを作って学習させます。

課題6:「問題(X)」と「答え(y)」にデータを分ける

課題: train_df_processed から、予測の答えである success 列を y_train に、問題(特徴量)であるそれ以外の列を X_train に、それぞれ分割してください。

ヒント: DataFrameから特定の列を削除するには .drop('列名', axis=1) を使います。

課題7:モデルを学習させる

課題: scikit-learnDecisionTreeClassifier を使って、決定木モデルを学習させてください。モデルのインスタンスを作成し、fit() メソッドで X_trainy_train を使って学習を実行します。

ヒント: from sklearn.tree import DecisionTreeClassifier で必要なものを取り込みましょう。モデルのインスタンスを作成する際は、random_state=42 を指定して結果を固定すると、他の人と結果を比較しやすくなります。

ステップ5:評価 - モデルの実力を試す

学習したモデルがどれくらい賢いのか、未知のデータ(cafe_test.csv)で腕試しをさせましょう。

課題8:テストデータも同じように前処理する

課題: cafe_test.csv を読み込み、訓練データと全く同じ手順で前処理を行ってください。

  1. cafe_test.csvtest_df として読み込む。
  2. manager_experience の欠損値を埋める。
  3. area 列を get_dummies で数値に変換し、dropで不要な列を削除してからconcatで結合する(課題5と同じ手順)。
  4. 前処理済みのDataFrameを X_test として準備する。

課題9:予測と答え合わせ

課題: 学習済みの model を使って X_test の成功予測を行い、その結果を predictions という変数に保存してください。その後、cafe_test_answers.csv を読み込んで実際の答えと比較し、accuracy_score を使ってモデルの正解率を計算しましょう。

ヒント: from sklearn.metrics import accuracy_score が必要です。モデルによる予測は .predict() メソッドで行います。

お疲れ様でした!これで演習は終了です。モデルの性能はどうでしたか?

次のページでは、モデルを保存について学びます。