🏠 Pythonで住宅価格を予測するモデルを作ってみた【Kaggle初級】

プログラミング

住宅価格の予測は、不動産業界や金融機関にとって重要な課題です。本記事では、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ノートブックを参考にしています:

House Prices Solution for Beginners!! 

A Detailed Regression Guide with House-pricing

タイトルとURLをコピーしました