はじめに
シリーズ初のミニ企画です。目標は、最高のレベルに最適化することではなく、データを理解し、機能を選択し、トレーニング/テストを分割し、ベースラインを構築し、モデルをトレーニングし、評価して結論を引き出すというプロセス全体を最初から最後まで実行することです。
問題のコンテキスト
ある都市には次の情報を含む住宅データがあります。
- エリア
- 寝室の数
- トイレ番号
- 地区
- 家の築年数
- 販売価格
目標は、新しい家の住宅価格を予測することです。
ミニプロジェクトの目標
- 基本的な EDA を実行してデータを理解する
- 最初のベースラインを構築する
- 少なくとも 1 つの回帰モデルをトレーニングする
- 指標を使用して明確な結論を与える
1. ビジネス上の質問
不動産業者または物件掲載システムは、新築住宅の公正な販売価格を見積もろうとしています。
対応する ML の質問:
入力された住宅情報から、推定販売価格はいくらになるでしょうか?
2. 最低限必要な EDA
import pandas as pd
df = pd.read_csv('data/raw/houses.csv')
print(df.head())
print(df.shape)
print(df.info())
print(df.isnull().sum())
print(df.describe())
少なくとも次の質問に答える必要があります。
- データは何行ありますか?
- データが欠落している列はありますか?
- 対象となる列は何ですか?
- モデルに含めても意味のない列はありますか?
3. 最初のフィーチャを選択します
最初のラウンドでは、あまり多くの列を選択しないでください。明らかな特徴をいくつか挙げます:
features = ['dien_tich', 'so_phong', 'so_toilet', 'tuoi_nha']
X = df[features]
y = df['gia']
最初のラウンドでいくつかの機能を選択する理由:
- デバッグが簡単
- 各変数の影響を理解しやすい
- 複雑なデータ処理におけるエラーを削減します
4. ベースライン
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_absolute_error
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.2, random_state=42
)
baseline_pred = [y_train.mean()] * len(y_test)
baseline_mae = mean_absolute_error(y_test, baseline_pred)
print('Baseline MAE:', baseline_mae)
##5. 初代モデル
from sklearn.linear_model import LinearRegression
model = LinearRegression()
model.fit(X_train, y_train)
pred = model.predict(X_test)
model_mae = mean_absolute_error(y_test, pred)
print('Model MAE:', model_mae)
6. 結果を読む
たとえば:
- ベースラインMAE: 0.85億
- モデルMAE: 04.2億
暫定的な結論:
- モデルはベースラインより明らかに優れています
- 初期ワークフローは順調に進んでいます
- 特徴エンジニアリングまたはより強力なモデルを使用してさらに改善できる
7. さらに一歩拡張します
次のようなカテゴリ変数を追加してみてください quan:
X = pd.get_dummies(df[['dien_tich', 'so_phong', 'so_toilet', 'tuoi_nha', 'quan']], drop_first=True)
y = df['gia']
次に、再度トレーニングしてメトリクスを比較します。これは、位置情報の追加が実際にモデルに役立つかどうかをテストする簡単な方法です。
8. ミニプロジェクト後の短いレポートのサンプル
次のように要約を書く必要があります。
私は住宅価格を予測するために 4 つの基本的な数値特徴を使用します。平均価格によるベースライン予測では MAE = X が得られ、線形回帰では MAE = Y が得られます。これは、モデルが機能と販売価格の関係を学習していることを示しています。ただし、モデルは現在、詳細な位置機能を使用しておらず、外れ値も処理していません。
ML はコーディングだけではなく、結果を伝えることも重要であるため、これは非常に重要な習慣です。
追加のチャレンジ
- 線形回帰とランダム フォレスト回帰を比較します。
- 機能を削除して、メトリックがどのように変化するかを確認してください。
- フィーチャの作成
gia_m2間違って使用した場合に漏れがないか確認してください。
よくある間違い
- 意味を理解せずにすべての列を使用する。
- 評価する前にトレーニングとテストを分離するのを忘れました。
- 指標がベースラインよりも優れていることを確認し、データを確認せずに早すぎる結論を導き出す。
完了基準
- ミニプロジェクトの最初から最後までの実行を完了しました
- ベースラインと少なくとも 1 つの機械学習モデルがあります
- 結果について短くてわかりやすい結論を書くことができる