[SIGNATE練習問題]アワビの年齢予測

こんにちは、@Yoshimiです。

データ分析の練習としてSIGNATEの【練習問題】アワビの年齢予測に取り組んでみたので備忘録として残しておきます。ランキングは温かい目で見てください。

データ概要

アワビの計測データからアワビの年齢を予測するモデルを作成していただきます

アワビの年齢は、殻を切断し、染色し、顕微鏡で輪の数を数えることによって知ることができますが、これはとても時間のかかる作業です。もっと簡単に取得できる他の測定値を用いて年齢を予測することで、この退屈な作業を簡略化しましょう!

カラム ヘッダ名称 データ型 説明
0 id int インデックスとして使用
1 Sex char 性別
2 Length float 長さ
3 Diameter float 直径
4 Height float 高さ
5 Whole weight float 全体の重量
6 Shucked weight float 身の重量
7 Viscera weight float 内臓の重量
8 Shell weight float 殻の重量
9 Rings int 年齢(1~29)

みなさんはアワビを頻繁に食べるのでしょうか?私もそんなに食べたことはありません。学生時代和食店でアルバイトしているとき、アワビがメニューに入っていて試食する程度だったと思います。社会人になってからは一度もありません!誰かご馳走して欲しいです・・・。

モジュール・データの読み込み

今回はgoogle driveにデータを格納し、google colabで呼び出してデータを利用していきます。

データを確認していきましょう

OUT:train(2088, 10) / test(2089, 9) / sample(2089, 2)

目的変数との関係性を確認する

目的変数「Rings」と各特徴量の関係をチェックしていきます。

可視化できました。関係性が強そうなのは・・・LengthとDiameterあたりでしょうか?他にもShell weightもありますが、要検討です。Heightは外れ値の存在によって相関関係を確認しにくいですね。数値で相関の強さをチェックします。

RingsはShell weightとの相関が最も強いことが分かります。

データクリーニング / 前処理

データを確認するとカテゴリーデータが存在し、そのままではモデルに利用することができませんですので、テーブルデータのクリーニング・前処理を行います。代表的な前処理は以下の通りです。(上級者はもっと多くのことをすると思います。)

  1. 欠損値の確認・穴埋め
  2. カテゴリーデータの処理(ダミー変数化)
  3. 外れ値の処理

カテゴリーデータの処理(ダミー変数化)

Sexをダミー変数化します。

外れ値の処理

散布図行列でHeightに外れ値があることがわかりました。削除していきます。

ダミー変数化、外れ値の処理を行った結果の相関係数を見てみます。

Heightの相関係数は上がりました。ダミー変数化を行った結果、相関が低い特徴量が見つかりましたので、Sex_FとSex_Mは削除対象とします。次にモデルの準備に入ります。

モデル構築の準備

モデル構築の準備をします。
今回求める目的変数はRingsなので、yへRingsを代入します。trainから削除する特徴量を削除し、train_Xへ代入。yとtrain_Xを作成し、検証モデルを作成するために、train_test_splitを利用します。

OUT:(1669, 8),(418, 8),(1669,),(418,)

モデルの構築

特徴量の単位が一定でないため標準化します。

さて、ここからいくつかのモデル構築を行っていきます。

多変量線形回帰:LinearRegression

OUT:R^2: 0.4865054006594162

パイプラインの導入

パイプライン(pipeline)を導入し、標準化から学習までをまとめて処理してみます。

OUT:R^2: 0.4865054006594163

同じ結果がでました。for文でまわしたりすれば複数モデルを一括で処理もできると思います。日々精進。

Lasso回帰

Lasso回帰は最小二乗コスト関数に対して、重みの合計を足したもの(L1正則化項と呼びます)です。

パラメータが表示されます。詳しくは公式サイトでチェックすることをお勧めします。

正則化の強さである’alpha’を最適化対象のパラメータとしてグリッドサーチを実施します。

OUT:R^2: 0.48711119099625944
ベストパラメータ: {‘lasso__alpha’: 0.001}

Ridge回帰

OUT:R^2: 0.4866776898313726
ベストパラメータ {‘ridge__alpha’: 0.1}

ElasticNet回帰

LassoとRidgeをミックスしたElasticNet回帰を実施します。いいとこどりのモデルです。

OUT:
R^2: 0.48731289998133465
ベストパラメータ: {‘elasticnet__alpha’: 0.001, ‘elasticnet__l1_ratio’: 0.9}

さて一通りの「LinearRegression」「Lasso回帰」「Ridge回帰」「ElasticNet回帰」をチェックしたところ、わずかながらもElasticNet回帰が一番良いスコアになりました。従いまして、ElasticNet回帰でtestデータで予測を行っていきます。

Testデータのクリーニング・成形

trainデータで行ったデータクリーニングをTestデータでも行っていきます。

予測する

投稿用ファイルを作成し終了です。

最後に

これからの課題はPipelineの作りこみ、複数モデルの一括評価、グリッドサーチ(GridSearchCV)の熟練度です。この辺りは専門的に調べてどんどん使えるようにしていきます。

アワビ食べたいな~。


なりたい自分になれる
スキルアップならUdemy

私も利用し、高収入エンジニアになったのよ。未経験から機械学習、データサイエンティスト、アプリ開発エンジニアを目指せるコンテンツが多数あります。優秀な講師が多数!割引を利用すれば1,200円〜から動画購入可能です。!

ABOUTこの記事をかいた人

大学卒業して、キラキラしていたのでIT業界にはいりましたが、中身はブラックでした!!だから、投資技術を磨いて早くリタイヤしたいです。株価、Python、機械学習をもうもう勉強中です。経済的自由を手に入れて農家やりたい!