Skip to main content

カフェ成功予測:機械学習ライブラリ詳細ガイド

このガイドでは、「カフェの成功予測演習」で使うPythonライブラリの主要な機能(メソッド)を一つひとつ丁寧に解説します。各機能が「何をするものか」「なぜこの演習で重要なのか」「具体的にどう使うのか」を理解し、リファレンスとして活用してください。


1. データ分析ライブラリ:Pandas

Pandasは、CSVファイルのようなテーブル形式のデータを扱うためのライブラリです。データの前処理や分析の基盤となります。

pd.read_csv()

  • 機能: CSVファイルを読み込み、Pandasの基本データ構造である「DataFrame」に変換します。
  • なぜ重要か: この演習の出発点です。train.csvtest.csvをプログラムに読み込むために必ず使います。
  • 使い方:
    import pandas as pd

    # train.csvを読み込み、train_dfという名前のDataFrameを作成
    train_df = pd.read_csv('train.csv')

    # test.csvも同様に読み込む
    test_df = pd.read_csv('test.csv')
  • 機能: DataFrameの先頭から指定した行数(デフォルトは5行)を表示します。
  • なぜ重要か: データを読み込んだ直後に使い、ファイルが正しく読み込まれているか、どのようなカラムやデータが入っているかを素早く確認できます。
  • 使い方:
    # train_dfの最初の3行を表示
    print(train_df.head(3))

.info()

  • 機能: DataFrameの全体像(総行数、各カラムのデータ型、欠損していない値の数、メモリ使用量など)を表示します。
  • なぜ重要か: データ分析を始める前の健康診断のようなものです。特に「Non-Null Count(欠損していない値の数)」を見ることで、どのカラムにデータが欠けている(欠損値がある)かを特定できます。
  • 使い方:
    train_df.info()

.isnull().sum()

  • 機能: 各カラムに欠損値が「いくつあるか」を合計して表示します。
  • なぜ重要か: .info()よりもシンプルに、欠損値の数だけを素早く確認したい場合に便利です。欠損値の処理方針を立てるための第一歩です。
  • 使い方:
    print(train_df.isnull().sum())

.fillna()

  • 機能: 欠損値(NaNなど)を、指定した別の値で埋めます。
  • なぜ重要か: 多くの機械学習モデルは欠損値があるとエラーになります。そのため、欠損値を「平均値」「中央値」「最頻値」などの代表的な値で補完する必要があります。
  • 使い方:
    # 'average_monthly_sales'カラムの欠損値を、そのカラムの平均値で埋める
    mean_sales = train_df['average_monthly_sales'].mean()
    train_df['average_monthly_sales'].fillna(mean_sales)

pd.get_dummies()

  • 機能: UrbanRuralのような文字列で表されたカテゴリカルデータを、機械学習モデルが扱える数値(0と1)の形式に変換します(One-Hot Encoding)。
  • なぜ重要か: モデルは「文字」を理解できません。この処理により、カテゴリの違いをモデルに正しく伝えることができます。
  • 使い方:
    # 'location'カラムからダミー変数を作成
    # prefixは新しいカラム名の接頭辞になる
    location_dummies = pd.get_dummies(train_df['location'], prefix='loc', drop_first=True)

    # この時点では、元のtrain_dfと、新しいlocation_dummiesの2つのDataFrameが存在
    print(location_dummies.head())

pd.concat()

  • 機能: 複数のDataFrameを、行方向(縦)または列方向(横)に連結します。
  • なぜ重要か: pd.get_dummiesで作成したOne-Hot EncodingのDataFrameを、元のDataFrameに結合(横に追加)する際に使います。これにより、数値化された新しい特徴量を元のデータセットに組み込むことができます。
  • 使い方:
    # 元のDataFrameとダミー変数のDataFrameを列方向(横)に連結
    train_df = pd.concat([train_df, location_dummies], axis=1)
    # axis=1 は列方向(横)の連結を指定

    # 連結後のDataFrameを確認
    print(train_df.head())

.drop()

  • 機能: 指定したカラム(列)または行をDataFrameから削除します。
  • なぜ重要か: 予測に不要なidカラムや、get_dummiesで数値化した後の元の文字列カラムなどを削除し、モデルの学習に必要なデータだけに整理するために使います。
  • 使い方:
    # 'id'カラムを削除する
    train_df = train_df.drop('id', axis=1)
    # axis=1 は「カラム」を対象とすることを意味します

2. データ可視化:Matplotlib & Seaborn

データをグラフにして視覚的に理解するためのライブラリです。Seabornを使うと、Matplotlibの機能をより簡単に、美しいデザインで利用できます。

sns.countplot()

  • 機能: カテゴリごとに、データがいくつあるかを棒グラフで表示します。
  • なぜ重要か: 「成功したカフェと失敗したカフェはそれぞれいくつあるか」「どの地域の店舗が多いか」などを一目で把握できます。hueオプションを使えば、カテゴリの組み合わせ(例:地域ごとの成功/失敗数)も見ることができます。
  • 使い方:
    import seaborn as sns
    import matplotlib.pyplot as plt

    # 成功(1)と失敗(0)の数をプロット
    sns.countplot(x='successful', data=train_df)
    plt.title('Number of Successful vs. Unsuccessful Cafes')
    plt.show() # グラフを表示

sns.histplot()

  • 機能: 数値データの分布をヒストグラム(度数分布図)で表示します。
  • なぜ重要か: 「月間売上」や「座席数」といった数値データが、どの範囲に集中しているか、どのような形状の分布をしているかを確認できます。
  • 使い方:
    # 月間平均売上の分布をプロット
    sns.histplot(data=train_df, x='average_monthly_sales', kde=True)
    # kde=True は分布の滑らかな曲線も表示するオプション
    plt.title('Distribution of Average Monthly Sales')
    plt.show()

3. 機械学習ライブラリ:Scikit-learn

モデルの訓練、評価、予測など、機械学習の主要な機能がまとめられたライブラリです。

train_test_split()

  • 機能: データを「モデルを学習させるための訓練データ」と「モデルの性能を評価するための検証データ」に分割します。
  • なぜ重要か: モデルが未知のデータに対してどれだけ正しく予測できるか(汎化性能)を公平に評価するために不可欠です。学習に使ったデータで評価すると、過剰に良い評価が出てしまいます。
  • 使い方:
    from sklearn.model_selection import train_test_split

    X = train_df.drop('successful', axis=1) # 特徴量(説明変数)
    y = train_df['successful'] # 目的変数

    X_train, X_val, y_train, y_val = train_test_split(X, y, test_size=0.2, random_state=42)
    # test_size=0.2 は20%を検証データに使うという意味
    # random_state=42 は、誰が実行しても同じ分割結果になるように乱数を固定

LogisticRegression() (モデルの一例)

  • 機能: Scikit-learnで提供される機械学習アルゴリズムの1つ。「ロジスティック回帰」という、分類問題(今回は成功/失敗の2値分類)でよく使われるモデルを準備します。
  • なぜ重要か: 予測モデルの本体です。他にもDecisionTreeClassifier(決定木)など様々なモデルがあり、どれを選択するかが予測精度に影響します。
  • 使い方:
    from sklearn.linear_model import LogisticRegression

    # モデルを準備
    model = LogisticRegression(random_state=42)

.fit()

  • 機能: 準備したモデルに訓練データ(X_train, y_train)を与えて、学習を実行します。
  • なぜ重要か: このプロセスを通じて、モデルはデータの中にあるパターン(どのような特徴が成功に結びつくか)を学びます。これが「訓練」や「学習」と呼ばれる工程です。
  • 使い方:
    # モデルを訓練データで学習させる
    model.fit(X_train, y_train)

.predict()

  • 機能: 学習済みのモデルを使って、新しいデータに対する予測結果を生成します。
  • なぜ重要か: 検証データ(X_val)に対する予測を出してモデルの精度を評価したり、最終的に提出が必要なテストデータ(test_df)に対する予測結果を求めたりするために使います。
  • 使い方:
    # 検証データの予測
    val_predictions = model.predict(X_val)

    # テストデータの予測
    test_predictions = model.predict(test_df)

accuracy_score()

  • 機能: モデルの予測が、実際の正解(y_val)とどれだけ一致しているかを示す「正解率」を計算します。
  • なぜ重要か: モデルの性能を客観的な数値で評価するための指標です。このスコアを改善することが、モデル改良の目標の1つになります。
  • 使い方:
    from sklearn.metrics import accuracy_score

    # 検証データでの正解率を計算
    accuracy = accuracy_score(y_val, val_predictions)
    print(f"Accuracy: {accuracy}")