Splunk にも MLTK (Machine Learning Took Kit) なるものが用意されており、python の scikit-learn を利用した機械学習ができるようになっていますが、実際にデータ分析でよく使われる Kaggle のデータを Splunkを使って分析したらどうなるか実験してみました。
ちなみに、本来Splunkはリアルタイムに発生するデータの取り扱いの方が得意なので、このような Fixデータの解析向けではないと思うのですが、とりあえずやってみたいと思います。あと、精度を上げるためのもっといいアプローチはたくさんあると思いますが、今の私のレベルでやらせてもらいますので、あしからず。
全体の流れ
今回は Kaggle のチュートリアルとしても有名な Titanic を利用して分析してみます。
少し長くなるので、4つの章に分けて書きたいと思います。
1章:データ確認編:実際のデータを可視化して確認します。分析方針を決めるためにも重要なステップ
2章:処理編 :機械学習ができるように、データを整形します。もっとも手間がかかるが重要なパート
3章:学習編 :いくつかのアルゴリズムを利用して Train データを学習しモデルを作成します。
4章:実践編 :最もよかった学習器を Testデータに適用して、Kaggleに Submitします。
利用データ
Kaggle の チュートリアルとしても有名なこちらの Titanicデータセットを利用します。
https://www.kaggle.com/c/titanic
各乗客の特徴データがあり、また目的変数として生存結果が 0と1で表記されております。
データは,訓練データ(train.csv)と、テストデータ (test.csv)に最初から分かれており、テストデータには生存結果が載っていないので、訓練データで学習させたモデルをもとに、テストデータの生存結果を予測します。最終的に、Kaggleに予測結果を送ることで、正解率などが判明します。
各データフィールドの説明もサイトに載ってますが、簡単に解説します。
・PassengerID --- 通し番号
・Survived --- 生存の結果(1は生存。0は死亡)
・Pclass -- 客室等級(1が最高)
・Name -- 名前
・Sex -- 性別
・Age -- 年齢
・SibSp --乗客下兄弟の数
・Parch -- 乗船した親・子の数
・Ticket -- チケット番号
・Fare -- 乗船代金
・Cabin -- 部屋番号
・Embarked -- 乗船した港。 S.C.Q の3種類
利用アプリ
今回分析するにあたり利用した Splunkアプリはこちらです。
・ Splunk Datasets Add-on : データの中身を確認・編集するのに便利です。
https://splunkbase.splunk.com/app/3245/
・ Splunk Machine Learning Toolkit : MLTK 本体です。
https://splunkbase.splunk.com/app/2890/
・ Python for Scientific Computing (for Linux 64-bit) : MLTKを動かす上で必要な scikit-learn ライブラリが入ってます。各OS毎にコンポーネントが違うので注意してください。
https://splunkbase.splunk.com/app/2882/
データの取り込み
それでは実際に、訓練データ(train.csv)を取り込んでみます。今回は lookupファイルとして認識させて、データセットを作成します。
- Lookup ファイルの作成と Lookup 定義の作成 (ここでは詳細は割愛します)
- Splunk Datasets Add-onで追加したコンポーネントを利用してテーブルの拡張。次に全てのフィールドを選択し完了.最後に新しいテーブルセット名をつけて保存する
- データの中身を確認する。後ほどこちらの画面を利用して確認をおこなっていく。
## データの確認
それでは、実際にデータの中身を可視化しながら見ていき、今後の分析の方向性を決めたいと思います。
1)欠損データの有無
先ほどのデータセットの画面で確認できます。
欠損があるフィールドは、以下の3つ
・Age : 19.8%
・Cabin: 77.1%
・Embarked : 0.22%
2) データタイプ
こちらも先ほどのデータセット画面で確認できます。 (#は数値、aは文字列)
・数値: Age, Fare, Parch, PassengerId, Pclass, SibSp, Survived
・文字列: Cabin, Embarked, Name, Sex,
・混在: Ticket (74% 数字、26% キャラクター)
3) 生存の割合を確認
データセットを使って、もう少し可視化するため「ピポットで可視化」に移動する
4) 男女の生存比率
男性が2倍近く乗船していたが、生存者は女性の方が2倍くらい多いことがわかる。不謹慎だがレディーファーストができていたということか。
5) 客室等級の生存比率
やはり、等級が下がると死亡率があがる。3等室は圧倒的に多い。逆に1等室だと高い確率で生存している
6) 乗船港の違いによる生存比率
Cから乗った乗客は半数以上生存している。Sから乗った乗客は高い確率で死亡している。
7) 年齢別の生存数
今度はサーチを使って、年齢を"Child", "Young", "Adult", "Old" の4つのカテゴリーに分けて可視化してみる。10才以下の Child グループは半数以上が生存している。それ以上だとあまり変わらない。
8) 運賃別の生存数
運賃を見るとタダで乗船しているひとから500ドル以上の高額を支払っている人までバラバラいるが、安いグループから高いグループまで6段階にグループ分けして、生存数を比較してみる。運賃の高いグループ(100ドル以上のF5,F6グループ)は生存率が高い。
まとめ
データ欠損のあるフィールドを確認したり、生存結果に関係のありそうなフィールドが確認できました。
特に性別はかなりの関係性がありそうですし、客室等級の高い人も生存している割合が大きいことがわかります。
また年齢や運賃などは特定のグループに所属していると生存率が高くなることがわかりました。
これだけでもある程度の予測がたてられそうですが、これらの情報を元に機械学習のためのデータ前処理を次の章から実施していきたいと思います。