Kaggleコンペ(Instant Gratification)

今日からInstant Gratificationコンペに参加します。
https://www.kaggle.com/c/instant-gratification/

【コンペ名】
Instant Gratification

【データの説明】
匿名データの二値分類

【コード】

まずは、訓練データとテストデータのサイズを確認します。

import numpy as np
import pandas as pd 
import os
import matplotlib.pyplot as plt
import seaborn as sns

df_train = pd.read_csv("../input/train.csv")
df_test = pd.read_csv("../input/test.csv")

print("trian data shape = ".format(df_train.shape))
print("test data shape = ".format(df_test.shape))
trian data shape = (262144, 258)
test data shape = (131073, 257)

つぎに、訓練データに注目し、データフレームの先頭5行分確認します

display(df_train.head())

カラム名が匿名なため、データの意味は不明

次は、分類の目的変数であるtargetの個数を確認する。

sns.countplot(df_train["target"])

“0”,”1″ラベルの個数は両方ともだいたい同じであるようだ。

次は、欠損値の確認。

# 欠損値の確認
null_train_se = df_train.isnull().sum()
# nullが存在するカラム名の表示
print(null_train_se[null_train_se==1])
Series([], dtype: int64)

欠損値はないことがわかった。

各説明変数の分布はどうなっているか確認する。

# 特徴の名前を取得
feature_name_list = [feature_name for feature_name in df_train.columns if not feature_name in ["id","target"]]
# 分布プロット用の関数
def distplot(df_1,df_2,label_1,label_2,feature_name_list,row_size,col_size):
    plt.figure()
    ratio = int(len(feature_name_list)/col_size)
    plt.subplots(row_size,col_size,figsize=(15,5*(ratio+1)))
    cnt = 0
    for feature_name in feature_name_list:
        cnt += 1
        plt.subplot(row_size,col_size,cnt)
        sns.distplot(df_1[feature_name],hist=False,label=label_1)
        sns.distplot(df_2[feature_name],hist=False,label=label_2)
        plt.title(cnt)
        

distplot(df_train[feature_name_list].loc[df_train["target"] == 0],
         df_train[feature_name_list].loc[df_train["target"] == 1],
         "0","1",feature_name_list,64,4)

256個のグラフが出力されるが、数が多すぎるので、その中の一部を示す。

上の4つのグラフのうち、右から2番目のwheezy-copper-turtie-magicという変数の分布は他のグラフと比べて形が大きく異なる。
実は、この変数以外の255個の変数はだいだい0周辺に値が集中している分布だ。
target=0とtarget=1との分布の違いは見られなかった。

ikunobu
Kaggle