カフェ成功予測:機械学習ライブラリ詳細ガイド
このガイドでは、「カフェの成功予測演習」で使うPythonライブラリの主要な機能(メソッド)を一つひとつ丁寧に解説します。各機能が「何をするものか」「なぜこの演習で重要なのか」「具体的にどう使うのか」を理解し、リファレンスとして活用してください。
1. データ分析ライブラリ:Pandas
Pandasは、CSVファイルのようなテーブル形式のデータを扱うためのライブラリです。データの前処理や分析の基盤となります。
pd.read_csv()
- 機能: CSVファイルを読み込み、Pandasの基本データ構造である「DataFrame」に変換します。
- なぜ重要か: この演習の出発点です。
train.csvとtest.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')
.head()
- 機能: 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()
- 機能:
UrbanやRuralのような文字列で表されたカテゴリカルデータを、機械学習モデルが扱える数値(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}")