やっていたKaggleのコンペが終わったので少し振り返る

私が参加していたコンペ(こちら)が終わったので少し振り返ってみようと思います。 一応私の経歴を軽く話すとデータサイエンティスト的な仕事をしつつも予測や分類自体はしたことなく、データセットの作り方や加工の作業がメインでpythonに関してはある程度分かっているという状況です。 そのうえでG検定やE資格を取得済みなので、機械学習や深層学習の知識はある程度ある形でKaggleを始めて挑んでみました。 定石としてタイタニックを触るべきですが、タイタニックのランキングを見てもつまらないので今開催されているSwagやKnowledgeと呼ばれるタイプのコンペに参加してみることをおススメします。 こちらの本でも言及されているのですがどうもタイタニックのデータは初心者向けではないみたいです。初心者を抜けた人向けなイメージです。 それはさておき今回のコンペでは一旦自身で加工してみてモデルを作って提出をするという流れをやってみました。 そこまでは前回のブログでも書いてました。その後ですが他の人のコードをを見て、Chat-GPTに解説してもらって分からない点を質問するということをひたすら繰り返してました。 いくつかピックアップすると ワンホットエンコーディングした時、出現回数が最も少ないカラムを削除していた。なぜ削除するのか? テストデータセットの全行数に対してユニークな値の割合が5%未満のカラムを取得するのはなぜですか?どのような意味がありますか? 特徴量間のピアソン相関を計算するのはなぜか? Optunaの研究(study)を最適化とはどういう意味か? という感じでたくさんの質問を投げてみました。その後帰ってきた返答に関してわからなかった部分もさらに深堀して聞くということを繰り返していました。 そこで理解した点としては ユニーク値が少ない値に関してはワンホットエンコーディングを行うのが有効←その前にやることがある 特徴量を減らすには全体行の5%未満の値でもいいが、クロスバリデーションで特徴量の有無を見てモデルの評価を行ったほうがよい ヒートマップは線形関係に関しては有効だが非線形関係には向いてない ワンホットエンコーディングした際、訓練データまたはテストデータ片方にしかないデータが存在することがあるので、1つにまとめるアプローチがある Optunaを使ってハイパーパラメータの最適化を行える 私の中ではヒートマップで各特徴量の相関を見たほうがいいと思っていたのですが、線形関係であれば見るべきであって、非線形関係であれば意味は少ないというのは新しい発見でした。よく考えればわかることではありますが(笑) それからクロスバリデーションで特徴量の有無によってモデルの評価と比較をすることができることは知りませんでした。クロスバリデーションはただデータセットを分割して検証をするだけで、特徴量の有無まで比較できるとは思ってませんでした。 ここで私のコンペは終了しました。上記の気づきをコードに落とし込むことができませんでした。上の解説や質問と返答の理解に時間を費やしてました。まあ土日はゲームをしてたので結局やらずに終わっただけですが… コンペが終わった後のスコアとディスカッションも見てたのですが、public1位の人がprivateでは200位台になってたりしてそんなこともあるのかと思いながら見てました。 ちなみに私は8個ほど順位を落としてました。そこまで熱心にデータの加工やパラメータの調整をしてないので気にしてないですが さてこのコンペが終わったのでまた次のコンペにも挑戦しようかと思います。まだSwagかKnowledgeに挑戦してみます。また現場で画像系のAIを作るみたいなので画像コンペにも参加してみようと思います。果たして役に立つのか不明ですが また今回の解説だったり質問の返答などは正しいとは限らないのでもう少し精査しようと思います。少しづつでも確実に自身の知恵としていきたいですね。ではでは

2024年4月1日

Kaggleのスコアを少しずつ上げていってる話

前回から4日ほど空いてしまったのですが、Kaggleでどうやってスコアを上げるか四苦八苦してました。 そもそも前のスコアが低すぎたので少し改善するだけで上がるかなと思ってたのですが、なぜか上がらず少し結果を見てたら自分のコードミスだったというオチです(笑) 前回の予測コードがこちら で修正したコードがこちら for文を使って目的変数が変わるたびモデルの学習を行った後、予測を行っています。ちなみに私は訓練データを8:2に分割して実行しています。 前の時は全ての目的変数の学習が終わったとモデル予測を行っていました。本来であれば目的変数1つに対して学習して予測を行うのですが、全て学習した後予測してたので最後の目的変数の学習をしたモデルになってたので、想定していた結果にはならなかったみたいです。 というわけで修正した後のスコアがこちら すごい!だいぶ上がった!というかこれが普通のスコアっぽい(笑) よくなったので今度はもう少しデータと向き合いつつ、より良い加工方法とモデルの作り方を見てみようと思います。またDiscussionを見つつ、他の人のNotebookを見てみました。他人のコードをChat-GPTに解説してもらいつつ、不明な点を聞いてみようと思います。 余談ですが何もしないときとワンホットエンコーディングを行った時の結果を見てみます。AUCが上がったものもあれば下がったものもありますね。大幅に改善されたわけではないので、元のデータに対して加工したほうがよさそうです。外れ値とか入ってるかもしれないですね。 というわけでKaggleいろいろ試してるという話でした。ではでは

2024年3月22日

Kaggleをとりあえず触ってみて少しづつ予測や分類を理解していくぞ!

最初の段階でタイタニックを触ることが普通かもしれませんが、この書籍でも触れてますがタイタニックは軽く触るくらいでいいと思います。 順位もあまり動かないですし、モチベも続かないと思うので他のコンペに早く参加したほうが楽しい気がします。 私は今開催されているこちらのコンペに参加しています。こちらのコンペは基となったデータから似たような特徴量を作成したものになります。中身はテーブルデータなうえに “id” と数値データのみなのでとっつきやすいと思います。 とりあえず中を見てみます。 <class 'pandas.core.frame.DataFrame'> RangeIndex: 19219 entries, 0 to 19218 Data columns (total 35 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 id 19219 non-null int64 1 X_Minimum 19219 non-null int64 2 X_Maximum 19219 non-null int64 3 Y_Minimum 19219 non-null int64 4 Y_Maximum 19219 non-null int64 5 Pixels_Areas 19219 non-null int64 6 X_Perimeter 19219 non-null int64 7 Y_Perimeter 19219 non-null int64 8 Sum_of_Luminosity 19219 non-null int64 9 Minimum_of_Luminosity 19219 non-null int64 10 Maximum_of_Luminosity 19219 non-null int64 11 Length_of_Conveyer 19219 non-null int64 12 TypeOfSteel_A300 19219 non-null int64 13 TypeOfSteel_A400 19219 non-null int64 14 Steel_Plate_Thickness 19219 non-null int64 15 Edges_Index 19219 non-null float64 16 Empty_Index 19219 non-null float64 17 Square_Index 19219 non-null float64 18 Outside_X_Index 19219 non-null float64 19 Edges_X_Index 19219 non-null float64 20 Edges_Y_Index 19219 non-null float64 21 Outside_Global_Index 19219 non-null float64 22 LogOfAreas 19219 non-null float64 23 Log_X_Index 19219 non-null float64 24 Log_Y_Index 19219 non-null float64 25 Orientation_Index 19219 non-null float64 26 Luminosity_Index 19219 non-null float64 27 SigmoidOfAreas 19219 non-null float64 28 Pastry 19219 non-null int64 29 Z_Scratch 19219 non-null int64 30 K_Scatch 19219 non-null int64 31 Stains 19219 non-null int64 32 Dirtiness 19219 non-null int64 33 Bumps 19219 non-null int64 34 Other_Faults 19219 non-null int64 dtypes: float64(13), int64(22) memory usage: 5.1 MB 中身は数値データで最後の7カラムが予測対象の列になります。それから欠損値はないみたいなので、欠損値については考えなくてよさそうです。 ...

2024年3月18日

E資格が終わったので実践としてKaggleにも挑戦してみよう!

G検定に続きE資格も無事取得できたので今度は統計検定準1級やDS検定になるかと思いますが、一旦受験関係はやめてKaggleに挑戦しようと思います。 英語という観点では少し不利ですが、名前はよく知られてますし英語の練習にもなるかもしれないのでこちらを選びました。日本語が良ければSIGNATEというコンペがあります。 まずKaggleとはなんぞやということですが、競技プログラミングのデータサイエンティスト版ですね。要件を確認して、入力データを見て、予測や分類を行い、csvファイルを提出してスコアを競うという流れですね。 Kaggleの始め方は該当のページに飛んでアカウントを作成してください。メールアドレスまたはGoogleアカウントですぐに始められます。 そもそもKaggle以前にプログラム自体に触ったことがない人もいるかと思います。そんな人はpythonの勉強から始めましょう!こちらからKaggle内で勉強することもできます。pythonやpandasはもちろん、データの可視化、機械学習や深層学習、SQLも勉強できます。 プログラムが書けるようになったらいよいよ挑戦することになると思いますが、データ分析で一番重要なのはデータへの理解と加工だと考えています。 どんなデータが使われているか?、どの変数がどんな型になっているか?、外れ値や欠損値が含まれているか?、各変数の相関関係はどうか?など確認すべき点は多いです。また、そのデータに対する加工が適切かどうかも考えないといけません。欠損値は削除すべきか埋めるべきか?外れ値としてみるべきか? 8割くらいがデータへの理解と加工が重要だと思うのでこちらをさらっと流し見するといいかもです。ただ、プログラムはほぼ書いておらず図の見方やデータの確認方法がメインなので流し見でいいかと思います。 Kindle Unlimitedであればただで見れるので入っておくことをおススメします。サブスクで月額300円くらいですし、他のためになる本やくだらない本も読めますので本を読むいいきっかけになると思います。ただで見れるので細かく見ずわかってる場所は飛ばして、さらっと見ていきましょう。 次はこちらですね。たくさんの人がおすすめしてますが、データの加工方法からモデルの作成と評価、細かいポイントまで記載しています。私もまだ読み始めですが、目次を見た限りだとこれを見ればデータ分析が十分できると思います。画像や自然言語処理、GANなどは触れてないですが… 本を読みながらKaggleを触っていくのがいいと思います。よくタイタニックがおすすめされていますが、ランキングはほぼ変わらない上にやる気に繋がりにくいので今開催されているコンペに出るといい気がします。 賞金のほうでもいいですし、SwagやKnowledgeでもいいと思います。最初は上を目指さず、自身でいろいろ試して解答を提出して、他の人のコードを覗いたりDiscussionに参加したりするといいと思います。思わぬアイデアが埋まってたりしますし、知らないですが… とまあこんな感じで参加しようと思います。まずはテーブルデータのコンペから参加してみて、ゆくゆくは画像系とかやってみたいですね。ではでは

2024年3月13日