どうもニコイチです。前回の記事で、基礎統計量やグラフに関する見方を活用して、実際に仮説1を検証してみました。今回は、前回に引き引き続きデータを分析する際の基本的なステップとして、「仮説を立てること」の重要性とその検証方法を学びます。データをただ眺めるだけでは意味を見出すのが難しいため、具体的な仮説を立てながら進めていきます。
以下は、定期預金契約に関するデモデータを使った仮説の例です。
Pythonでデータ分析を始めよう!初心者向けガイド | いきかちガジェットゲームLab:ガジェット・ゲーム・DX
どうもニコイチです。今回はdemoデータを使って実際に予測モデルを作れるようになることを目的とした、シリーズをご紹介します。Pyhonってなに?どうやってつかうの?と戸惑って…
目次
仮説の例
前回のキャンペーンで成功した人は、再度申し込む可能性が高いのではないか?- 収入が高いほど定期預金を申し込む可能性が高いのではないか?
- 相関係数を使って、収入(
balance
)と定期預金申し込み有無(y
)の関係を確認します。 - 具体的には、次のコードを使用して計算します:
correlation = df[['balance', 'y_numeric']].corr() print(correlation)
- 実行結果例:
balance y_numeric balance 1.000 0.521 y_numeric 0.521 1.000
この場合、相関係数は約0.52であり、収入が高い人ほど定期預金を申し込む可能性があることを示唆しています。
- 実行結果例:
- 相関係数を使って、収入(
- 既婚者は未婚者よりも定期預金を申し込む傾向があるのではないか?
- 相関係数を使って、婚姻状況(
marital
)と定期預金申し込み有無(y
)の関係を確認します。 marital
を数値化し、次のように計算します:df['marital_numeric'] = df['marital'].map({'married': 1, 'single': 0, 'divorced': 0}) correlation = df[['marital_numeric', 'y_numeric']].corr() print(correlation)
実行結果例:marital_numeric y_numeric marital_numeric 1.000 0.315 y_numeric 0.315 1.000
この場合、相関係数は約0.31であり、既婚者は定期預金を申し込む傾向が少し高いことがわかります。
- 相関係数を使って、婚姻状況(
今回は、仮説1を基に「前回キャンペーンの成果(poutcome
)と定期預金申し込み有無(y
)」の関係性を調べます。
相関係数を使った仮説2と仮説3の解説
相関係数とは?
相関係数は、2つの変数間の関係性を数値で表した指標です。値の範囲は-1から1までで、以下のように解釈します:
- 1に近い:強い正の相関(片方が増えるともう片方も増える)
- 0に近い:相関がない
- -1に近い:強い負の相関(片方が増えるともう片方が減る)
相関係数を計算するには、Pythonのpandas
ライブラリを使用します。
仮説2:収入と定期預金申し込みの関係
仮説「収入が高いほど定期預金を申し込む可能性が高い」を検証するために、以下のコードを使用して相関係数を計算しました。
correlation = df[['balance', 'y_numeric']].corr()
print(correlation)
実行結果例:
balance y_numeric
balance 1.000 0.521
y_numeric 0.521 1.000
- 相関係数が0.521であることから、収入と定期預金申し込みには中程度の正の相関があることがわかります。
- 具体的には、収入が高いほど定期預金を申し込む傾向がある可能性が示唆されます。
仮説3:婚姻状況と定期預金申し込みの関係
仮説「既婚者は未婚者よりも定期預金を申し込む傾向がある」を検証するために、婚姻状況を数値化して相関係数を計算しました。
df['marital_numeric'] = df['marital'].map({'married': 1, 'single': 0, 'divorced': 0})
correlation = df[['marital_numeric', 'y_numeric']].corr()
print(correlation)
実行結果例:
marital_numeric y_numeric
marital_numeric 1.000 0.315
y_numeric 0.315 1.000
- 相関係数が0.315であることから、既婚者であることと定期預金申し込みには弱い正の相関があることがわかります。
- これは、既婚者が定期預金を申し込む傾向が若干高いことを示していますが、相関はそれほど強くありません。
データ解析の基本:クロス集計
仮説検証の第一歩として、pandas.crosstab
関数を使用したクロス集計を行います。この関数は、カテゴリーデータの分布や関連性を簡単に確認するのに便利です。
import pandas as pd
# データ読み込み
df = pd.read_csv('demo_data.csv')
# クロス集計
cross_tab = pd.crosstab(df['poutcome'], df['y'], margins=True)
print(cross_tab)
実行結果例
y no yes All
poutcome
failure 300 50 350
success 150 200 350
unknown 400 50 450
All 850 300 1150
- 縦軸:前回のキャンペーン結果(
poutcome
) - 横軸:定期預金申し込み有無(
y
) - 合計:
margins=True
オプションで全体の合計値を表示
申込率の計算
出現数の絶対値だけでは比較が難しいため、申込率(yesの割合)を算出します。
# 各カテゴリの申込率を計算
cross_tab['rate'] = cross_tab['yes'] / cross_tab['All']
print(cross_tab)
実行結果例
y no yes All rate
poutcome
failure 300 50 350 0.1429
success 150 200 350 0.5714
unknown 400 50 450 0.1111
All 850 300 1150 -
success
の申込率が最も高く、約57%となっています。
データ操作の基本:カラムの値変更と新規追加
- カラムの値を変更する例 数値型のカラムすべてに1を足したい場合:
df['balance'] = df['balance'] + 1
- 新しいカラムを追加する例 各行の
balance
を基にした新しい指標を計算して追加:df['balance_ratio'] = df['balance'] / df['balance'].sum()
データの可視化
データの傾向を視覚的に確認するために、以下の手法を使います。
1. 棒グラフ
カテゴリーデータの頻度を確認。
import matplotlib.pyplot as plt
df['poutcome'].value_counts().plot(kind='bar')
plt.xlabel('Poutcome')
plt.ylabel('Frequency')
plt.title('Distribution of Poutcome')
plt.show()
2. ヒートマップ
クロス集計結果を視覚化。
import seaborn as sns
sns.heatmap(cross_tab.iloc[:-1, :-1], annot=True, fmt='d', cmap='Blues')
plt.title('Poutcome vs Subscription')
plt.show()
まとめ
- 仮説を立てることで、データ分析が効率的に進められます。
- クロス集計や申込率の計算は、カテゴリーデータの関連性を調べる基本的な手法です。
- 可視化を組み合わせることで、データの傾向をより直感的に理解できます。
コメント