0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

機械学習の体験(5):住宅の平均価格の予測

Posted at

はじめに

この記事では、シンプルなデータセットを使用して、機械学習による重回帰分析の一連の流れを体験します。初心者の方でも、データのアップロードからモデルの学習、評価、そして実際の推論まで、基本的なステップを順を追って理解できる内容となっています。

今回は、ボストン市内の住宅データを用いて、重回帰分析によりその地区の住宅の平均価格を予測します。

Step.1 データの準備と確認

データのアップロード

まず、分析対象となるデータをシステムにアップロードします。ここでは、ボストン市内の戸建住宅のデータセットを用意します。このデータには、地域の犯罪発生率、住居の平均部屋数、住宅平均価格などが記録されています。

image.png

データの基本情報を確認

アップロードしたデータの全体像を把握することが重要です。まず、データセットの規模(行数×列数)を確認しましょう。これにより、どれだけのサンプル数と特徴量があるかが分かります。行数は学習に使用できるデータの件数、列数は各データが持つ属性の数を示しています。

image.png

カラム別の欠損値と統計情報

各カラム(列)ごとに、欠損値の有無やデータの概要を確認します。欠損値が多い場合は、データの前処理が必要になることがあります。この段階で、データの品質を見極めることができます。統計情報には、平均値、標準偏差、最小値、最大値などが含まれ、データの分布を理解する手がかりとなります。

image.png

データのプレビュー

実際のデータがどのような形式で格納されているかを確認します。ここで、各カラムの意味や値の範囲を把握し、後続の分析に備えます。実際のデータを目で見ることで、データの特性や異常値の有無をより直感的に理解できます。

image.png

Python Sandboxで詳細分析

より詳細な分析を行うために、Python Sandboxを使用します。Python Sandboxでは、Pythonコードを直接実行してデータを詳しく調査できます。これにより、統計情報だけでは分からない詳細なデータの特性を把握することができます。

Python Sandboxにアクセスします。

CRIME列(地域の犯罪発生率)のデータ分布を確認するため、以下のPythonコードを入力します。value_counts()メソッドは、各値の出現回数を集計する便利な関数です。

df_local['CRIME'].value_counts()

コードを実行します。

image.png

実行ボタンをクリックすると、Pythonコードが処理され、Pythonの実行結果が表示されます。
この結果から、CRIMEの分布を正確に把握できます。

image.png

CRIME列には、'very_low'、'high'、'low'の3種類のカテゴリがあることがわかりました。

ダミー変数化

機械学習モデルは基本的に数値データしか扱えません。そのため、カテゴリ型のデータ(文字列など)を数値に変換する必要があります。この処理を**ダミー変数化(One-Hot Encoding)**といいます。

例えば、地域の犯罪発生率(CRIME)が'very_low'、'high'、'low'という3つの値を持つ場合、これを「CRIME_low」、「CRIME_very_low」という2つの列に変換し、該当する方を1、該当しない方を0とします。この変換により、機械学習アルゴリズムがカテゴリ情報を適切に処理できるようになります。

ダミー変数化する列を選択します。今回は地域の犯罪発生率(CRIME)をダミー変数化します。

image.png

変換設定を確認します。ダミー変数化の方法や、元の列を残すかどうかなどを設定できます。

image.png

変換後、新しいデータセットが自動的に選択されます。CRIME列がダミー変数に変換されたことを確認できます。

image.png

最終確認を行い、問題なければ実行します。ダミー変数化により、カテゴリ型データが数値データに変換され、機械学習モデルで使用できるようになります。

image.png

欠損値の処理

データに欠損値が含まれている場合、機械学習モデルはうまく学習できません。そのため、欠損値を適切に処理する必要があります。欠損値の処理方法は、カラムの性質やデータの特性に応じて選択します。

平均値で補完(NOX列とRAD列)

数値型のデータに対しては、平均値で補完する方法が一般的です。ここでは、NOX列(一酸化窒素濃度)とRAD列(幹線道路へのアクセス指数)の欠損値を平均値で補完します。これらの列は連続値であるため、平均値による補完が適切です。

image.png

補完の設定を確認します。平均値で補完することで、データの全体的な傾向を維持しながら欠損値を埋めることができます。

image.png

データ変更プレビューを確認して、問題がなければ実行を行います。プレビューで補完後のデータを確認することで、意図しない変更を防ぐことができます。変更内容が期待通りであることを確認してから実行しましょう。

image.png

新しいデータセットが作成され、自動的に選択されます。元のデータセットは保持されるため、必要に応じて戻ることができます。

image.png

外れ値の処理

外れ値は、モデルの学習に悪影響を与える可能性があるため、適切に処理する必要があります。

散布図で外れ値を確認

目的変数(PRICE:住宅価格)と各特徴量の関係を散布図で可視化し、外れ値を確認します。

image.png

image.png

image.png

散布図の分析を続けます。

image.png

image.png

image.png

image.png

image.png

散布図の分析から、重回帰分析モデルに使用する特徴量を選定します。今回は、INDUS(非小売業用地の割合)、NOX(一酸化窒素濃度)、RM(平均部屋数)、PTRATIO(生徒教師比率)、LSTAT(低所得者人口の割合)がPRICE(住宅価格)と相関関係がありそうです。

発見した外れ値をフィルター条件に追加して、確認します。

image.png

外れ値を削除して、新しいデータセットを作成します。

image.png

プレビューで外れ値削除後のデータを確認します。

image.png

処理後のデータセット確認

新しいデータセットが作成され、自動的に選択されました。外れ値処理後のデータセットは、元のデータとは別に保存されるため、必要に応じて元のデータに戻ることも可能です。

image.png

相関行列を見て特徴量の絞り込み

目標変数(PRICE)を選択して、「相関行列を計算」と「相関係数を計算」の2つのボタンをクリックします。

image.png

相関行列ヒートマップの結果が表示されます。これにより、各特徴量間の相関関係を視覚的に把握できます。

image.png

相関係数ヒートマップの結果も確認します。

image.png

相関係数の結果一覧を確認し、目的変数との相関が高い特徴量を選定します。

image.png

image.png

Step.2 タスクタイプの選択

ここでは、実行したい機械学習のタスクタイプを選択します。今回は「回帰」タスクを選択します。回帰タスクでは、連続的な数値(今回の場合は住宅価格)を予測するモデルを構築します。これは、離散的なクラスラベルを予測する分類タスクとは異なります。

image.png

Step.3 目的変数と特徴量の設定

予測対象カラム(目的変数)の選択

目的変数とは、モデルが予測したい対象のことです。今回はPRICE列(住宅の平均価格)を選択します。この目的変数の値を正確に予測できるモデルを構築することが、機械学習の目標となります。

特徴量の選択

特徴量とは、予測を行うために使用する入力データのことです。今回は、散布図と相関分析の結果から選定した、INDUS、NOX、RM、PTRATIO、LSTATなど、住宅価格に影響を与えると考えられるカラムを選択します。適切な特徴量の選択は、モデルの精度に大きく影響します。

image.png

データの標準化

特徴量のスケールが異なる場合、モデルの学習に悪影響を与える可能性があります。そのため、データを標準化(平均0、標準偏差1に変換)することが推奨されます。

image.png

標準化の設定を確認します。

image.png

Step.4 モデルの学習

モデルタイプの選択

使用する機械学習アルゴリズムを選択します。回帰タスクでは、線形回帰、決定木、ランダムフォレストなど、様々なモデルから選ぶことができます。初めての場合は、デフォルトの推奨モデルを使用するのがおすすめです。それぞれのアルゴリズムには特徴があり、データの性質に応じて適切なものを選ぶことが重要です。

image.png

学習の設定

モデルの学習に関する詳細設定を行います。ここでは、訓練データとテストデータの分割比率、交差検証の方法、ハイパーパラメータなどを設定できます。デフォルト設定でも十分な結果が得られることが多いです。

image.png

学習の開始

モデルの学習を開始します。この処理では、システムが選択したデータとアルゴリズムを使用して、パターンを学習します。データ量やモデルの複雑さによって、処理時間は異なります。学習中、システムは訓練データから特徴量と目的変数(住宅価格)の関係性を見つけ出し、新しいデータに対しても正確な予測ができるようにモデルを調整していきます。

image.png

学習完了

学習が完了すると、学習済みモデルが一覧に表示されます。システムは自動的に今回学習されたモデルを選択してくれるため、初心者の方でも迷うことなく次のステップに進めます。

image.png

Step.5 モデルの評価

学習したモデルがどれだけ正確に予測できるかを評価します。回帰タスクでは、以下のような指標を確認し、モデルの性能を多角的に判断します。

  • 決定係数(R²): モデルがデータの変動をどれだけ説明できているかを示す指標(0〜1の値で、1に近いほど良い)
  • 平均絶対誤差(MAE): 予測値と実際の値の差の平均
  • 平均二乗誤差(MSE): 予測値と実際の値の差の二乗の平均
  • 二乗平均平方根誤差(RMSE): MSEの平方根で、元のデータと同じスケールで誤差を表現

image.png

image.png

残差プロットによる詳細分析

残差プロット(実際の値と予測値の差を可視化したグラフ)を確認することで、モデルの予測精度をより詳しく分析できます。残差がランダムに分散していれば、モデルは適切に学習できています。

image.png

image.png

image.png

特徴量重要度を表示

特徴量重要度は、各特徴量がモデルの予測にどれだけ貢献しているかを示す指標です。この情報により、どの要因が住宅価格の予測に最も影響を与えているかを理解できます。例えば、平均部屋数(RM)、低所得者人口の割合(LSTAT)、生徒教師比率(PTRATIO)などがどの程度重要かを数値で確認できます。

特徴量重要度の分析は、モデルの解釈可能性を高め、ビジネス上の洞察を得るのに役立ちます。

image.png

Step.6 モデルを使った推論

推論の実行

学習・評価が完了したモデルを使って、新しいデータに対する予測(推論)を行います。ここでは、未知の地区のデータ(犯罪発生率、平均部屋数、生徒教師比率など)を入力すると、その地区の住宅平均価格を予測してくれます。これが機械学習の最終的な目的であり、実際の業務で活用する段階となります。

推論画面では、各特徴量の値を入力します。

image.png

推論結果の確認

推論結果が表示されます。予測された住宅価格が表示され、モデルによる予測値を確認できます。この予測値を参考に、実際のビジネス判断や意思決定を行うことができます。

image.png

まとめ

この記事では、重回帰分析を用いた住宅価格予測の機械学習ワークフローを実践しました。データの準備から推論まで、一連の流れを体験することで、回帰タスクにおける機械学習プロジェクトの全体像を理解することができたと思います。

特に重要なポイントは以下の通りです。

  • カテゴリデータのダミー変数化: 文字列データを数値に変換する重要性
  • 欠損値の適切な処理: 平均値補完など、データの性質に応じた処理
  • 外れ値の確認と除去: 散布図による可視化と適切な処理
  • 相関分析による特徴量選択: 目的変数と相関の高い特徴量の選定
  • データの標準化: スケールの異なる特徴量の正規化
  • 回帰タスク特有の評価指標: R²、MAE、MSE、RMSEなどの理解
  • 残差プロットと特徴量重要度: モデルの詳細な分析と解釈可能性の向上

次のステップでは、より複雑なデータセットやアルゴリズム(ランダムフォレストなど)に挑戦してみてください。また、交差検証の活用、さらなる特徴量エンジニアリング、ハイパーパラメータのチューニングなど、より高度なテクニックを学ぶことで、さらに精度の高いモデルを構築できるようになります。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?