はじめに
この記事はデータ分析の定石というシリーズの1つになります。シリーズでは実データ分析をいくつかのフェーズに分けてまとめています。今回はそのうちの「探索的データ分析(EDA)による仮説立て」に焦点を当てています。
シリーズ全体の流れはこちらになります。
【実践】カリフォルニア住宅価格予測で学ぶ、データ分析の定石
EDA
探索的データ分析(EDA)の主な目的は、各データの特性や、データ同士の関係性を深く理解することです。
データを可視化し、「なぜこのような分布になっているのか?」という原因を考察し、「このデータは目的変数にどのように影響を与えるか?」という仮説を立てることをします。
この段階で立てた仮説が、後のモデル構築や特徴量エンジニアリングの方向性を決定づけるため、重要なプロセスとなります。
散布図行列の確認
ここでは前回描画した、外れ値を除外したpairplotを観察します。
実際には、気になったところを片っ端から考察して理解を原因を探りますが、
説明が冗長になるので今回は代表的な属性のみ考察します。
分析結果の考察
世帯所得と価格: 他の属性と比較よりもはっきりと、世帯所得が上がるにつれて、住宅価格の下限値が高くなる傾向が見られました。 このことから、世帯所得が住宅価格に影響を与える主要な要因の一つであるという仮説を立てることができます。
しかし、住宅価格が高いにもかかわらず、世帯所得が低い地域も存在します。この矛盾を説明する仮説として、その地域に高齢者が多く住んでいるか、あるいは別荘地である可能性が考えられます。前者の場合、住宅の資産価値は高いものの、住人の所得は退職後の年金生活などにより低いことが原因と考えらます。また後者の場合、高価な別荘である一方で、住民が別の場所で所得を得ていることが原因と考えられます。
地図上の分析
前回の分析で、海岸線に近いほど、価格帯が高い傾向が確認できてます。
海岸線という情報がうまく数値化できれば、有効な分析ができると考えられます。本来は厳密な位置があるはずですが、今回は適当な直線の組み合わせで近似することにします。そして、定義した海岸線を重ねて、グラフを観察します。
import plotly.graph_objects as go
import numpy as np
import seaborn as sns # seabornをインポート
# 外れ値を除外したデータを使用
data = raw_pair.drop(filtered_df.index)
# 緯度経度の境界線を定義
region_north_lines_edge = np.array([[-122.9, -120], [38, 34.1]])
region_south_lines_edge = np.array([[-120, -117.2], [34.1, 32.7]])
# seabornのRdYlGnパレットから、カテゴリ数(7段階)に応じた色のリストを取得
# as_hex=Trueで16進数形式の文字列に変換
colors = sns.color_palette('RdYlGn', n_colors=data['Price_rank'].nunique()).as_hex()
# Figureの作成
fig = go.Figure()
# Price_rankのカテゴリごとにループし、色を適用
# sorted()でランク順にトレースを追加
for category, color in zip(sorted(data['Price_rank'].unique()), colors):
subset = data[data['Price_rank'] == category]
fig.add_trace(go.Scatter(
x=subset['Longitude'],
y=subset['Latitude'],
mode='markers',
name=f'Price_rank {category}',
# ここでseabornから取得した色をマーカーに指定
marker=dict(color=color)
))
# 北部地域の境界線を追加
# 2点の座標
x_coords = region_north_lines_edge[0]
y_coords = region_north_lines_edge[1]
fig.add_trace(go.Scatter(
x=x_coords,
y=y_coords,
mode='lines+markers',
name='North Region Edge',
marker=dict(color='red')
))
# 南部地域の境界線を追加
# 2点の座標
x_coords = region_south_lines_edge[0]
y_coords = region_south_lines_edge[1]
fig.add_trace(go.Scatter(
x=x_coords,
y=y_coords,
mode='lines+markers',
name='South Region Edge',
marker=dict(color='red')
))
# レイアウト調整
fig.update_layout(
title='Latitude and Longitude vs Price',
xaxis_title='Longitude',
yaxis_title='Latitude'
)
fig.show()
分析結果の考察
海岸線からの距離と価格の関係:海岸線(赤線)から垂直に伸びる線を「海岸線からの距離」と定義して分析すると、海岸線に近い地域ほど住宅価格が高く、離れるにつれて価格が低くなる傾向が見られそうです。
そのため、今回のような海岸線からの距離が海岸線からの距離が価格に影響を与える重要な要因であるという仮説を立てることができます。
まとめと次やること
住宅価格に影響を与える重要な要因として、以下の2つの仮説が立てられました。
世帯所得と住宅価格の関係:
世帯所得が高くなるにつれて住宅価格の下限値が上昇する傾向が見られました。これは、所得が価格の主要な決定要因である可能性を示唆しています。ただし、一部には所得が低いにもかかわらず住宅価格が高い地域が存在します。この原因として、資産価値は高いが高齢者が住んでいる地域、または高所得者が所有する別荘地である可能性が考えられます。
海岸線からの距離と住宅価格の関係:
海岸線から垂直に伸びる線を「海岸線からの距離」と定義した場合、海岸線に近いほど住宅価格が高く、離れるにつれて低くなる傾向が見られました。これは、海岸線からの距離が住宅価格を予測する上で重要な要素であることを示唆しています。
次回は、これらの仮説を特徴量としてデータに落とし込む方法を考えていきます。

