Kaggleデータセットの取得と理解
「仮説はできた。次はデータだ。今回はKaggleのTelco Customer Churnデータセットを使う。」
田中VPoEがKaggleのページを開く。
「通信会社の顧客データで、業界標準のベンチマークデータセットだ。まずはデータを取得して、カラムの意味を完全に理解するところから始めよう。」
データセットの概要
Telco Customer Churnは、IBM Sample Data Setsとして公開されている通信会社の顧客データである。7,043件の顧客レコードと21列のカラムで構成される。
データ取得方法
# Kaggle APIを使った取得
# pip install kaggle
# kaggle datasets download -d blastchar/telco-customer-churn
# または直接読み込み
import pandas as pd
df = pd.read_csv('WA_Fn-UseC_-Telco-Customer-Churn.csv')
print(f"データサイズ: {df.shape}")
print(f"行数: {df.shape[0]}, 列数: {df.shape[1]}")
# 出力: データサイズ: (7043, 21)
データ辞書
顧客属性
| カラム名 | 型 | 説明 | 値の例 |
|---|---|---|---|
| customerID | string | 顧客ID | 7590-VHVEG |
| gender | string | 性別 | Male, Female |
| SeniorCitizen | int | 高齢者フラグ | 0, 1 |
| Partner | string | パートナー有無 | Yes, No |
| Dependents | string | 扶養家族有無 | Yes, No |
契約・サービス情報
| カラム名 | 型 | 説明 | 値の例 |
|---|---|---|---|
| tenure | int | 利用月数 | 0〜72 |
| PhoneService | string | 電話サービス | Yes, No |
| MultipleLines | string | 複数回線 | Yes, No, No phone service |
| InternetService | string | インターネットサービス | DSL, Fiber optic, No |
| OnlineSecurity | string | オンラインセキュリティ | Yes, No, No internet service |
| OnlineBackup | string | オンラインバックアップ | Yes, No, No internet service |
| DeviceProtection | string | デバイス保護 | Yes, No, No internet service |
| TechSupport | string | テックサポート | Yes, No, No internet service |
| StreamingTV | string | ストリーミングTV | Yes, No, No internet service |
| StreamingMovies | string | ストリーミング映画 | Yes, No, No internet service |
支払い情報
| カラム名 | 型 | 説明 | 値の例 |
|---|---|---|---|
| Contract | string | 契約形態 | Month-to-month, One year, Two year |
| PaperlessBilling | string | ペーパーレス請求 | Yes, No |
| PaymentMethod | string | 支払い方法 | Electronic check, Mailed check, Bank transfer, Credit card |
| MonthlyCharges | float | 月額料金 | 18.25〜118.75 |
| TotalCharges | string* | 総支払額 | 18.8〜8684.8 |
目的変数
| カラム名 | 型 | 説明 | 値の例 |
|---|---|---|---|
| Churn | string | 離反フラグ | Yes, No |
*注: TotalChargesはstringとして格納されており、型変換が必要。
初期データ確認
# 基本情報の確認
print(df.info())
print()
print(df.describe())
print()
# 目的変数の分布
print("離反率:")
print(df['Churn'].value_counts(normalize=True))
# No 0.7346
# Yes 0.2654
# → 約26.5%が離反(不均衡データ)
# TotalChargesの型問題
print(f"\nTotalChargesの型: {df['TotalCharges'].dtype}")
# object型 → 数値変換が必要
# 欠損値の確認
print(f"\n欠損値:\n{df.isnull().sum()}")
データの注意点
Telco Customer Churnデータの注意点:
1. TotalChargesがstring型 → float変換時にエラーが発生する行がある
2. 約26.5%が離反 → やや不均衡だが極端ではない
3. SeniorCitizenのみ0/1の数値、他はYes/Noの文字列
4. "No internet service"や"No phone service"の扱いを決める必要あり
5. customerIDは分析には不要(識別用)
まとめ
| 項目 | ポイント |
|---|---|
| データサイズ | 7,043行 × 21列 |
| 目的変数 | Churn(Yes/No、離反率約26.5%) |
| 特徴量 | 顧客属性5列、サービス9列、支払い4列 |
| 注意点 | TotalChargesの型変換、カテゴリ値の統一 |
| 不均衡度 | 約3(極端ではないが考慮が必要) |
チェックリスト
- データセットの取得方法を理解した
- 全21カラムの意味を説明できる
- 目的変数の分布(離反率約26.5%)を把握した
- TotalChargesの型問題を認識した
- データの注意点を理解した
次のステップへ
データの全体像を把握したところで、次はEDA(探索的データ分析)を実施し、データの分布やパターンを詳しく分析していこう。
推定読了時間: 30分