Kaggle「超」がつく初心者へ!まずはランキングでビリをとってみよう

Kaggle「超」がつく初心者へ!まずはランキングでビリをとってみよう

この記事を読むとわかること

・Kaggleを始めたら何をすべきかわかる

・コンペに参加する勇気が持てる

・初心者が挑戦するべきコンペがわかる

Kaggle初心者のメイド

私、機械学習をプログラミングスクールで学んだからKaggleを初めてみたい!
Kaggleといえばコンペだけど、ランキングが低いと馬鹿にされそうで怖いな

メイド長

まずは、やってみないと始まらないよ!
さっそくコンペに挑戦して、予測したもの(csvファイルなど)を提出するべきだよ!
ランキングなんて、ビリでもいいんだよ。
むしろ、勝つための知識を覚えてランキングが上がっていく様子を楽しむ方がモチベーションがあがって続くよ!

というわけで、Kaggle初心者は、すぐにコンペに参加するべきという話をしていきます。

初心者がKaggleに挑戦してみる意味とは

Kaggleに挑戦する意味って何だろう?
賞金を得ること?
称号を手に入れて名声を手に入れることかな?

うーーん、自分の実力を試すところじゃない?
コンペで上位になると、企業や他人にアピールできるから、AI関連の仕事に就きたいときに役立つかもね。

うーん、そうなんだ~

まずは、赤点でも良いから、作ったモデルで学習させた予測値を提出しよう。
自分のスキルが、世界中のAIエンジニアからの位置がわかるよ。
Kaggle始めたてなんて、大概、ランキングはかなり下の方になっているよ。
しかし、そこからが本当のスタートですよ。

Kaggleは学校の赤点とは違う

高校時代のテストで赤点を取ってしまうと同じ学年をもう一度やらないといけないというペナルティがあります。

それ以外にも、赤点を取ると昇進に響いたり、留年などさまざまな問題が発生します。

しかしKaggleは赤点を取るほど悪いスコアとってもペナルティがあるわけではありません。

ランキングがビリになるだけです。

ビリということは、下がいないということなので、数分でもなにか改善すれば上に行けるということですね!

具体的に以下のようなことをやっていけばスコアが上がります。

  1. 前処理を真面目にやろう
  2. 特長をちゃんと分析しよう
  3. アルゴリズムをかえてみよう
  4. 評価も適切に行う

他にもいろいろあると思いますが、筆者は今ところ上記のことしか思いつきませんが、これらをやっていくと、ランキングが上っていくのがわかるのでモチベーションになります!

Kaggle初心者が挑戦してみるとよいコンペは?

コンペは、自分ができそうなものからやってみると良いと思います。

初心者向けのコンペと言えば、Titanic(タイタニック)です。

タイタニックは、賞金が出ないが、kaggleのコンペがどんなものか知るのに挑戦してみることをオススメします。

タイタニックのサイト

Titanic: Machine Learning from Disaster

まずは、「Join Competition」を押してコンペに参加してみましょう!

赤点取るためのKaggleのタイタニックのコンペで実際にやったこと

初心者である筆者は、適当なモデルをつくって、成果物を提出しました。

どんな流れでKaggleコンペで予測値を作成したのか?

まずは前処理

・訓練データから数字の列だけ取り出す

・なぜ数字かというと、機械学習のアルゴリズムにロジスティック回帰を選んだためが文字列を受け付けないから。

・数字ではない列に対しては、one-hot表現などに変換処理が必要

機械学習のアルゴリズムに通す

・パラメーターチューニングなし

・分類タスクのためロジステック回帰を選ぶ

・本当は、ロジステック回帰以外にもlightbgなどのロジックを試すべき

提出してみよう

・アルゴリズムに通したら評価してモデルの性能をチェックするべきだが、面倒だからやっていない。

・提出様にデータを編集する

以下のようにcsvファイルを書き出す。ポイントとして引数 indexはFalseにします。

indexまで出力され、採点対象にならなくなってしまうためです。

df_submit.to_csv(“Submission_data.csv”, index = False)

csvファイルを提出

おそらくスコアは悪いかもしれないが、まずは一連の流れを作ってしまいます。

これを基準にして、より点数をよくする気持ちです。

サンプルコード

筆者が実際にどんなコードを書いたのか公開します。


#ライブラリー読み込み
import numpy as np 
import pandas as pd 
from sklearn.neighbors import KNeighborsClassifier
from sklearn.linear_model import LogisticRegression
import lightgbm as lgb
from  sklearn.tree import DecisionTreeRegressor

import os
print(os.listdir("../input"))



#訓練データを読み込む
tf_train = pd.read_csv("../input/train.csv")

#テスト用のデータを読み込む
tf_test = pd.read_csv("../input/test.csv")

#正解データを読み込む
tf_gender_submission = pd.read_csv("../input/gender_submission.csv")
#tf_train.head()
display(tf_train.head())

display(tf_train.dtypes)


#カテゴリ変数をone_hot表現に置き換えるための設定
#one_hot_columns = ['Cabin','Embarked']
one_hot_columns = ['Embarked']

#男女について数値に変換する
genders = {'male': 0, 'female': 1}
# Sexをgendersを用いて数値に変換
tf_train['Sex'] = tf_train['Sex'].map(genders)
tf_test['Sex'] = tf_test['Sex'].map(genders)


#####################
#説明変数と目的変数を分ける
#####################

#目的変数を取得する
Y_train = tf_train.loc[:, "Survived"]

#ここでは特徴量と思われるカラムを選択する
columns = ["Pclass", "Sex", "Age","SibSp", "Parch",'Fare','Embarked']
X_train  = tf_train.loc[:, columns]
X_test  = tf_test.loc[:, columns]


#one-hot表現
X_train = pd.get_dummies(X_train,
                       dummy_na=True,
                       columns=one_hot_columns)

X_test = pd.get_dummies(X_test,
                       dummy_na=True,
                       columns=one_hot_columns)

display(X_train)


#欠損値の穴埋めをする(testのときにデータと正解値の行数が一致しなくなるため)
#しかし、テストにつかうデータに対して、欠損値に穴埋めしてよいのかという疑問は残る
X_train = X_train.fillna(method="ffill")
X_test = X_test.fillna(method="ffill")


cols_model = set(X_train.columns.values)
cols_score = set(X_test.columns.values)

diff1 = cols_model - cols_score
print('モデルのみに存在する項目: %s' % diff1)

diff2 = cols_score - cols_model
print('スコアのみに存在する項目: %s' % diff2)


#######################################
## アルゴリズムに通す
#######################################
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler

pipelines ={
    'knn': Pipeline([('scl',StandardScaler()),
                       ('est',KNeighborsClassifier())]),

    'logistic': Pipeline([('scl',StandardScaler()),
                          ('est',LogisticRegression(random_state=1))])    
}
#LGBMClassifier

pipelines["logistic"].fit(X_train, Y_train)


#予測する
predicted_survived = pipelines["logistic"].predict(X_test)

#念の為nullチェック
print(X_test.isnull().any())

#ここからデータの検証に入る
from sklearn.metrics import mean_absolute_error

#0に近づくほど精度が高いモデルと言える
y = tf_gender_submission.Survived
error = mean_absolute_error(y, predicted_survived)
print("error:%f" % error)

#提出用にデータ編集
#Id,SalePrice
df_submit = pd.DataFrame( columns=['PassengerId','Survived'])
df_submit["PassengerId"] = tf_test["PassengerId"]
df_submit["Survived"] =  predicted_survived
display(df_submit)
df_submit.to_csv("Submission_data.csv", index = False)


このサンプルを提出したらビリから数えた方が近いところにいました。

ビリからが本当のスタート

ここで現状が分かりました。

そこから前処理をちゃんとやる、ロジックを選ぶ(試行錯誤して選ぶ)をひたすら繰り返してスコアを上げて、より上に向かっている感じがモチベーションが続く。

Kaggleは、モデルの作り方など公開してくれているので、それを参考にしてもよい。

最近は、Kaggleに勝つための本が出ているので、本の内容もかなり参考になります。

Kaggleの本について

本には、以下の内容が、わかりやすく詳しく書いてあり、参考になりました。

Kaggleに限らず、実業務でも十分に役立ちます。

・Kaggleの使い方(画面の操作方法)

・コンペに参加する方法

・プライベートとパブリックの違い(筆者は、本を読んでやっと理解できた)

・時系列データの扱い方

・特徴量の作成などの前処理の方法

・モデルの作成の考え方

・モデルのチューニング方法

・その他、Kaggleで勝つためのポイントが多数掲載されている。

本で覚えたことをKaggleのコンペで使ってランキング少しでも上がると、それがまたモチベーションになったりする。

筆者が通っていたプログラミングスクールの講師(詳しくは下のリンク参照)も絶賛していたので、Kaggleで勝って賞金を欲しい人におすすめです。

https://programming-info.dream-target.jp/aijobcolle-study

まとめ

いかがですか?

以上、Kaggleを始めたらまずは、ビリでも良いので予測値などを提出してみようと話しでした。

少しでも知識をつけて、ランキングが上がる様子を楽しめると、モチベーションになり続けることができます。

スポンサーリンク
PR




PR




シェアする

  • このエントリーをはてなブックマークに追加

フォローする

スポンサーリンク
PR