住宅価格の予測は、不動産業界や金融機関にとって重要な課題です。本記事では、Kaggleの「House Prices: Advanced Regression Techniques」コンペティションのデータセットを使用して、Pythonで住宅価格を予測するモデルの作成方法を解説します。初心者の方でも理解しやすいように、データの前処理からモデルの評価まで、ステップバイステップで説明します。
データの取得と概要
まずは、Kaggleの「House Prices: Advanced Regression Techniques」コンペティションのページからデータをダウンロードします。データセットには、訓練データ(train.csv)とテストデータ(test.csv)が含まれており、訓練データには住宅の特徴量と販売価格が含まれています。
1 2 3 4 5 6 7 8 9 | import pandas as pd # データの読み込み train = pd.read_csv( 'train.csv' ) test = pd.read_csv( 'test.csv' ) # データの形状を確認 print (f "訓練データの形状: {train.shape}" ) print (f "テストデータの形状: {test.shape}" ) |
訓練データには1460件、テストデータには1459件のサンプルが含まれています。各サンプルには、住宅の特徴量(例:面積、築年数、部屋数など)が含まれています。
データの前処理
次に、データの前処理を行います。これは、欠損値の処理やデータ型の変換などを含みます。
欠損値の確認
1 2 3 4 | # 欠損値の数を確認 missing_values = train.isnull(). sum () missing_values = missing_values[missing_values > 0 ] print (missing_values) |
欠損値が存在する特徴量には、適切な処理が必要です。例えば、数値データであれば中央値で補完し、カテゴリデータであれば最頻値で補完することが一般的です。
データ型の変換
一部の数値データは、実際にはカテゴリデータとして扱うべき場合があります。例えば、‘MSSubClass’は建物のクラスを表す数値ですが、これはカテゴリデータとして扱うべきです。
1 2 3 | # 'MSSubClass'をカテゴリ型に変換 train[ 'MSSubClass' ] = train[ 'MSSubClass' ].astype( str ) test[ 'MSSubClass' ] = test[ 'MSSubClass' ].astype( str ) |
特徴量の選択とエンジニアリング
モデルの性能を向上させるためには、重要な特徴量を選択し、新たな特徴量を作成することが重要です。
相関係数の確認
まず、各特徴量と目的変数(SalePrice)との相関係数を確認します。
1 2 3 4 5 6 7 8 9 10 | import seaborn as sns import matplotlib.pyplot as plt # 数値データの相関係数を計算 corr_matrix = train.corr() # 相関係数が高い特徴量を表示 top_corr_features = corr_matrix.index[ abs (corr_matrix[ "SalePrice" ]) > 0.5 ] plt.figure(figsize = ( 10 , 10 )) sns.heatmap(train[top_corr_features].corr(), annot = True , cmap = "RdYlGn" ) plt.show() |
このようにして、目的変数と強い相関を持つ特徴量を特定できます。
新たな特徴量の作成
例えば、地下室の面積(TotalBsmtSF)と地上の居住面積(GrLivArea)を合計して、住宅の総面積を表す新たな特徴量を作成できます。
1 2 3 | # 総面積の特徴量を作成 train[ 'TotalSF' ] = train[ 'TotalBsmtSF' ] + train[ '1stFlrSF' ] + train[ '2ndFlrSF' ] test[ 'TotalSF' ] = test[ 'TotalBsmtSF' ] + test[ '1stFlrSF' ] + test[ '2ndFlrSF' ] |
モデルの構築と評価
前処理と特徴量エンジニアリングが完了したら、モデルの構築と評価を行います。ここでは、線形回帰モデルを使用します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | from sklearn.linear_model import LinearRegression from sklearn.model_selection import train_test_split from sklearn.metrics import mean_squared_error import numpy as np # 目的変数と特徴量を定義 X = train.drop([ 'SalePrice' , 'Id' ], axis = 1 ) y = train[ 'SalePrice' ] # 訓練データと検証データに分割 X_train, X_valid, y_train, y_valid = train_test_split(X, y, test_size = 0.2 , random_state = 42 ) # モデルの訓練 model = LinearRegression() model.fit(X_train, y_train) # 検証データで予測 y_pred = model.predict(X_valid) # RMSEを計算 rmse = np.sqrt(mean_squared_error(y_valid, y_pred)) print (f "RMSE: {rmse}" ) |
RMSE(Root Mean Squared Error)は、予測値と実際の値の差の二乗平均平方根であり、モデルの精度を評価する指標です。
予測と提出ファイルの作成
最終的に、テストデータに対して予測を行い、Kaggleに提出するためのファイルを作成します。
1 2 3 4 5 6 7 8 9 10 11 | # テストデータで予測 test_predictions = model.predict(test.drop( 'Id' , axis = 1 )) # 提出ファイルの作成 submission = pd.DataFrame({ 'Id' : test[ 'Id' ], 'SalePrice' : test_predictions }) # CSVファイルとして保存 submission.to_csv( 'submission.csv' , index = False ) |
このCSVファイルをKaggleのコンペティションページにアップロードすることで、モデルの性能を評価できます。
まとめ
本記事では、Kaggleの「House Prices: Advanced Regression Techniques」コンペティションのデータを使用して、Pythonで住宅価格を予測するモデルの作成方法を解説しました。データの前処理、特徴量エンジニアリング、モデルの構築と評価、予測と提出ファイルの作成といった一連の流れを学ぶことで、機械学習の基本的なプロセスを理解できます。今後は、より高度なモデル(例:XGBoostやLightGBM)を試すことで、予測精度の向上を目指しましょう。
※本記事は、以下のKaggleノートブックを参考にしています: