コンテンツへスキップ

kaggle

Kaggle活動記録-8

こんにちは。アイティーシーの藤原です。

今回も、機械学習初心者の私が取り組んだ、Kaggleコンペティションについてご紹介いたします。
前回、私が挑戦しましたコンペティションに関する記事は以下から閲覧できます。

【今回取り組んだコンペティション】
Housing Prices Competition for Kaggle Learn Users

「家の敷地面積」や「築年数」などの81の特徴量データから家の販売価格を予測するコンペティションとなります。
これらの特徴量の中には欠損値や前処理が必要なものも含まれております。
こちらのコンペティションの特徴は、Kaggleで用意されている学習コース「Intro to Machine Learning」の最終課題として位置づけされていることです。
kaggleではコンペティションの他にも、「Learn」という学習コースが数多く用意されています。
その中に上述しました「Intro to Machine Learning」という、機械学習の基礎や決定木などの手法について学べる入門コースがあります。
全7ステップほどあるコースなのですが、その最終課題として用意されているのが今回のコンペティションです。

【作成したモデル】
アルゴリズムは決定木の手法をベースとしたランダムフォレストを採用いたしました。
(今回の取り組みの主旨として、学習コースで学んだことを使いたかったため)
詳細な説明についてはこちらを参照ください。
https://www.kaggle.com/code/dansbecker/random-forests

まずは、学習コースで学んだとおりにモデルを作成。MAE(平均絶対誤差)は 21857でした。
MAEとは、モデルが出力した予測値と正解値との誤差を計算した予測精度の評価に有効な指標です。
こちらについても詳細はこちらをご参照ください。
https://www.kaggle.com/code/dansbecker/model-validation

その後、もう少し精度を上げようと「YearRemodAdd(改築年月日)」や「OverallCond(全体の品質)」といった欠損値のないかつ精度向上に有効な数値型の特徴量を選定、結果10項目追加し、再度検証。
MAE(平均絶対誤差)は17342でした。
有効な特徴量を用いることで、およそ4500点ほど誤差を少なくすることに成功いたしました。

作成したコードはこちらから
https://www.kaggle.com/code/shutafujiwara/exercise-machine-learning-competitions

【所感】
学習コースの課題として設定されているだけあって、誘導などが分かりやすく非常に取り組みやすかったです。
データ分析経験が全くない方でも、迷うことなく取り組める課題だと思います。
玄人向けのみならず、こういったデータ分析の取っ掛かりのようなテーマも用意されていて大変ありがたいです。
また更なるスコア向上のためには、欠損値のある特徴量の利用や別のアルゴリズムの活用が必要不可欠かと思われますので、
学習と経験を積み重ね、再度取り組んでみたいと思います。

最後までご精読ありがとうございました。

————————————————
自己紹介
所属:株式会社アイティーシー Data Analytics事業部所属
経歴:2022年度入社。
入社後は、ローコード開発ツールを用いたシステム開発やニアショア開発を担当。
kaggleアカウントページはこちら:https://www.kaggle.com/shutafujiwara

Kaggle活動記録-7

はじめまして。アイティーシー ソリューション事業部に所属しております、東村と申します。
今回の記事では、私が取り組んだコンペについてお話しできればと思います。

 

今回取り組んだコンペ

Digit Recognizer

 

コンペ内容

手書きの0~9の数字をモデルに当てさせて正答率を競うコンペです。データを見てみるとこんな感じです。

作成したモデル

データの一つひとつは784の数字の羅列ですが、28×28の画像データとして扱うことができます。今回は画像データとして扱い、畳み込み層を用いたモデルを作成します。

作ったモデルは、 畳み込み→畳み込み→全結合 というシンプルなものです。畳み込み層は一つだと心もとないかな…と思ったので二つ入れました。バッチサイズは適当に32とし、最適化関数はSGDを使ってみます。

作成したコードはこちら

 

結果

スコアは0.97946でした。つまり、未知のデータのうち97.9%はうまく当てられたみたいです。結構良いのではないでしょうか。

 

スコア向上

97.9%は低くないとは言え、コンペ上位の方々は軒並み98~99%超えです。なので、ひとまずは98%超えを目指したいと思います。

すぐに思いつく中で実装が簡単なのが、最適化関数をSGDからAdamにすることです。個人的に分かりやすい最適化関数がSGDなのでこれを使いましたが、計算に時間がかかる上に今は改良された最適化関数がたくさん出ています。いたるところで用いられていると噂のAdam、計算も早く安定して精度が出るらしいのでこちらを使ってみます。

(参考:https://qiita.com/omiita/items/1735c1d048fe5f611f80)

 

結果

スコアは0.98875に伸びました。ただし学習曲線をみてみると、少し訓練データに適応しすぎな気もします。

 

最後に

他にも少し学習回数や学習率をいじってみましたが、あまり精度は伸びませんでした。他に思いつくことは、

・回転・拡大縮小だけでデータ拡張

・モデルの見直し

などでしょうか。今の自己ベストが98.8%なので、次はこれらを試してスコア99%超えを目指したいと思います。

最後まで読んでいただき、ありがとうございました。次回の記事もどうぞよろしくお願いいたします。

 

 

Kaggle活動記録-6

はじめまして。アイティーシーの平垣と申します。
本記事は、Python・機械学習・kaggle全くの初心者である私が取り組んだKaggleコンペティション(おなじみのTitanicですが…)のご紹介です。

今回取り組んだコンペティション
Titanic – Machine Learning from Disaster | Kaggle

コンペティションの内容・目的
タイタニック号の遭難事故での乗客データから、誰が生存し生き残るか?を予測するコンペティションです。
乗客データは、学習用データと訓練用データに分かれており、名前・年齢・性別・社会的地位などの情報が与えられています。
生存には、運の要素のほかにもこれらの要素が関係あったと考えられていて、この問いに答える、より正確な予測モデルを作成することが目的です。

学習・分析データについて
このコンペティションの学習・分析データが以下の3ファイルです。

  • train.csv(学習用の乗客データ)
  • test.csv(分析用の乗客データ)
  • sample_submission.csv(提出ファイルのサンプル)

各ファイル内の項目については、以下をご参照ください。

Titanic – Machine Learning from Disaster | Kaggle

実践
上述の通り私は、Pythonや機械学習については未経験ですが、Titanicのコンペでは有志の方が作成しているチュートリアルガイド(Titanic Tutorial | Kaggle)があるため、その通りに進めることでひとまず予測モデルの作成をすることができました。

<チュートリアルの内容>
チュートリアルでは、特徴量として学習用データの客室のグレード、性別、同乗している配偶者、兄弟、親、子どもの数を使用し、ランダムフォレスト・モデルを構築し、訓練用データの乗客の生存予測を行っていました。
このチュートリアルを完了して、提出した時点のスコアは0.77511でした。

<Fare(旅客運賃)の追加>
このスコアを向上するために、知識がないなりに何かできないかと考えた結果、特徴量として学習用データのFare(旅客運賃)も追加して、再構築してみることにします。

Fare(旅客運賃)を追加した理由としましては

  1. 高い運賃を払える人ほど、生存率が高いのではないかと仮定
  2. 生存率との相関係数を確認したら0.25であり、弱い正の相関があることが判明

以上2点から追加してみることにしました。

ただ、直接チュートリアルのモデルに特徴量として学習用データのFareを追加し、再構築しようしても、訓練用データのFareに欠損値が1つあり、うまくいきませんでした。

解決策について調べてみると、前処理というものが必要らしく、欠損値を埋めるか削除しないといけないそうです。
今回の場合は、欠損値が訓練用データの値なので削除はよくないだろうと考え、欠損値を埋める方向で行きます。
どの値で欠損値を埋めるか決定するために、まず訓練用データのFareの分布図、平均値、中央値を求めました。その結果、平均値と中央値の値に差があり、分布図も歪んでいたので欠損値として、中央値を用いることに決定しました。
そして、モデルを構築して再び実行。スコアは0.77751
気持ちばかりスコアが上昇しました、、、

<Age(年齢)の追加>
さすがにもう少し、スコアが向上してほしいので今度は、Age(年齢)も特徴量として追加してみることにしました。
Ageは欠損値が多くあり使いにくいなと思っていたのですが、生存率には関係があるだろうと仮定し、中央値で欠損値を補完しました。
モデルを構築し、再び実行。スコアは0.78229となりました。
前モデルよりはスコアの上昇が見られたのでやはり年齢は重要な要素であるのかなと予測できます。

所感
その後も、特徴量全部追加(スコアは減少)やAge・Fareの欠損値を平均値で追加(スコアは上昇)などを行いましたが、いずれも微々たる変化でした。
よりスコアを上昇するには、きちんと学習して、前処理やデータの加工方法、新たな分析モデルについての知識を吸収する必要性を感じました。

今回、初めてTitanicのコンペティションに参加しましたが、噂通り機械学習やkaggle初心者の方にとてもおすすめです。
チュートリアルでモデルの作成をするので、知識がなくてもその土台の上で自分なりにモデルの再構築が行えます。
また、スコアという目に見える形で結果がわかるのでモチベーションを保ちやすいのもいい点ですね。

以上で本コンペティションの取り組みは終了とします。
今回作成したコードはこちら(My first Titanic | Kaggle

最後まで拝読頂き、ありがとうございました。
今後も精進してまいりますのでまたの更新をお待ちください。

Kaggle活動記録-5

KaggleのCompetitionsで手書き数字認識に挑戦!
MNISTデータセットを使って99%の予測精度を達成

こんにちは、アイティーシーの平野です。
普段は基幹システムの保守運用を行っていますが、
今回はKaggleのCompetitionsに挑戦してみました。

【今回取り組んだコンペティション】
画像処理に興味があったので、GettingStartedの中から「digit recognizer」と呼ばれる
画像処理の課題にチャレンジしてみました。

【コンペの概要】
手書き数字が書かれた0から9までの数字を学習し、
与えられた画像から数字を判断できるモデルを作成するというものです。

この課題では、有名なデータセットであるMNISTが使用されています。
MNISTは、機械学習や画像処理の世界におけるHello Worldとも言われるほどポピュラーなデータセットです。

【取り組み結果】
CNN(畳み込みニューラルネットワーク)を利用してモデルをトレーニングしました。
詳しいコードや実際の結果は、以下のURLからご覧いただけます。
→ URL: https://www.kaggle.com/code/katsuya1112/digit-recognizer/edit

なんと、予測精度は99.096%に達しました!
現時点でのリーダーボードは402位でした。リーダーボードを見ると、驚くべきことに100%の予測精度を達成している参加者もいるようですね。すごいです!

100%の精度を出すにはどうすればよいのかと考えてみましたが、CNNのアーキテクチャの変更、学習回数を増やすなどしか思いつきませんでした。
どんな方法を使ったらそこまでの精度が出るのか気になります。

Kaggleには、多くの参加者が公開しているコードや情報があります。
これらを参考にしながら取り組むことで、意外と簡単に動かすことができました。
わからないコードは、今はやりのChatGPTに教えてもらったので、理解がスムーズに進みました。

画像処理に興味がある方はぜひこのコンペに参加してみてください!

————————————————–
自己紹介
経歴:2019年度入社。入社後から現在まで、電力業界向けSAPパッケージ(ERP,BW)の運用保守を担当。
kaggleアカウントページはこちら:https://www.kaggle.com/katsuya1112

 

Kaggle活動記録-4

はじめまして。
アイティーシーの門田と申します。
今回は私が取り組んだKaggleコンペのご紹介です。

今回のコンペ
Spaceship Titanic

コンペの内容
久しぶりにKaggleを触るため、リハビリがてらに、初心者向けと名高いタイタニックに参加しました。
「またタイタニックやんけ」と思われるかもしれませんが、なんと今回のタイタニック号は宇宙船です。
そして、時空の歪みと衝突して異次元へ転送されてしまった乗客の被害状況を分析するのが、今回の課題です。

学習・分析データについて
このコンペのInputとして提供されるのが、以下の3ファイルです。
・train.csv(学習用の乗客データ)
・test.csv(分析用の乗客データ)
・sample_submission.csv(提出ファイルのサンプル)

各ファイル内の項目については、以下をご参照ください。
配布データ

train.csvを使って学習して、test.csvに対して予測して、sample_submission.csvと同じ形式のファイルを作って提出するのが、このコンペの目的です。
こちらも乗客データが表形式で分かりやすいのが、触りやすくていいですね。

考察
実際に記載したコードとスコアはこちら
スコアの向上案の1つとして、値が抜けていた項目の補完処理を考えています。
現在のコードではシンプルにバックフィルで補完していますが、乗客のデッキごとに特徴量の傾向が分かれていたため、これは活用出来そうですね。
この仮説検証で、またこのNotebookを随時更新していきます。

今回の活動記録は以上となります。
最後までご拝読頂きましてありがとうございました。
またの更新をお待ちください。

kaggle活動記録-2

こんにちは。アイティーシーの藤原です。
今回は新卒社会人1年目、python・機械学習初心者の私が取り組んだ、Kaggleコンペティションについてご紹介いたします。

今回取り組んだコンペティション
Titanic – Machine Learning from Disaster

コンペティションの内容
タイタニック号の遭難事故での乗客データから、誰が生存者生き残るか?を予測するコンペティションです。
乗客データは訓練用データとテストデータに分かれており、それぞれの乗客者データには名前、年齢、性別、社会的地位の情報が与えられました。

所感
Titanic Tutorialはkaggle初学者が一番初めに取り組むべきコンペティションだと思います。理由は以下の通りです。
・kaggleプラットフォームに慣れることを目的として作成されたコンペティションであること。
・有志の方がチュートリアルガイドを作成していること。

kaggleでコンペティションに参加するためには、用意されたデータを取得して、学習モデルを構築し、それらから得た分析結果を提出する必要があります。
チュートリアルガイドでは、これらのステップについて順を追って解説しているので、kaggleの使い方について簡単に理解することができました。
こちらのチュートリアルガイドは、このコンペティション用に作成されたものなので、書かれた通りに作業を進めるだけでコンペティションを完了させることができました。
私が今回取り組んだコードはこちらから参照することができます。ご興味ある方はぜひご覧ください。

私はPythonや機械学習については研修を受けた程度で、高度なスキルや現場での経験を持っているわけではありません。
こちらのチュートリアルガイドにはコーディングも記載されていますので、機械学習そのものに不安を持たれている方でも問題ありません。それでも不安に思われる方は、kaggle内にPythonや機械学習についての学習コースも用意されていますので、そちらから取り組まれてもいいかもしれません。


(↑kaggleの学習コースページ。初歩から学習することができます。)

kaggleに登録はしたものの、どこから手をつけたらいいのかわからないという方にはぜひ、こちらのコンペティションに参加することをお勧めいたします。

————————————————–
自己紹介
所属:株式会社アイティーシー ソリューション事業部所属
経歴:2022年度入社。新卒一年目。
現在、一人前のSE・DSになるため日々の業務に勤しんでおります。
kaggleアカウントページはこちら:https://www.kaggle.com/shutafujiwara

Kaggle活動記録-1

こんにちは。アイティーシー DA事業部の岡です。

Kaggle活動記録では、岡が参加したKaggleコンペティションの内容と、実績について詳しく書いていきます。
※本記事は、機械学習を勉強し始めた方や、これからKaggle等のコンペティションサイトに参加しようとされている方向けの記事です。以降で出現する専門用語について、1つひとつの説明を割愛しているので、何卒ご容赦ください。

Kaggleについて
皆さま、Kaggleについてご存じでしょうか?
Kaggle(サイト)は、企業や研究者がデータやコードを投稿・共有し、世界中のデータサイエンティストがその最適モデルを競い合うプラットフォームサイトです。https://www.kaggle.com/
Kaggle社はGoogle傘下の、予想モデリングおよび分析手法関連プラットフォームを提供している企業です。

今回ご紹介するコンペティション
Tabular Playground Series-6月版
「Tabular Playground Series」は、他のコンペティションと比較し、参加しやすい初心者向けのコンペティションです。
~Tabular Playground Series 参加しやすいポイント~
◎学習/分析対象データは、表形式のデータで、ほとんどの場合、データファイルは1種類のみです。
◎ほとんどのSeriesのデータで、提供されるデータに欠損値は存在しません。
◎コンペティションで競う評価指標はメジャーなものが多く分かりやすいです。
正答率や絶対平均誤差がよく使用される評価指標になります。

コンペティション内容詳細
上記『参加しやすいポイント』で記載した内容とは相反しますが、6月版コンペティションは、欠損値が多く存在するデータ群が提供され、これ(欠損値)を予測/補完するモデルを作成、精度を競い合う、という内容でした。評価指標はRMSE(二乗平均平方根誤差)で、RMSEが小さいほど精度が高いモデル(予測)である、と評価されます。

予測値算出までの主な流れ
Tabular Playground Seriesで、予測値を提出するまでの”個人的な”作業の流れは決まっていて、以下のようになります。
データ状態の確認(EDA)
・・
学習データの準備
・・
モデルの構築(学習)
・・
精度評価
・・
提出用データ作成
この流れに沿って、実際にモデル構築を行ったソースコード、フェーズ毎の詳細な説明などは以下Kaggleページで公開しています。ご興味があれば、是非ご覧ください。
https://www.kaggle.com/code/imnaho/tps-jun22-eda-predict

考察
今回のコンペティションは、個人的にはとても納得できる結果が出ました。
今回の分析対象のデータは、ID列を除いた80列、1000000行のデータ群でしたが、データ状態を確認したところ、単相関で相関が強い列と相関がほぼ0なデータ列が極端に分かれていることが分かりました。

(↑公開コードより単相関のheatmap画像を抜粋。黒色箇所が相関ほぼ0です。↑)
このことから、特に相関が強い列については回帰やランダムフォレストなど、数値予測としてポピュラーなアルゴリズムを利用することで、精度が高くなることが予想できますし、逆に相関ほぼ0な列については他の列はあまり気にせず、単純な平均値や中央値により補完する方が良いのではないか?と予想することができます。
上記URLで記載している公開コードでは、補完が必要な列に対し、列ごとに複数のアルゴリズムで学習させ、精度を評価しています。
具体的には、欠損値が存在しているデータ列数が55列、選定したアルゴリズムが4種類+単純な中央値補完1種類で精度を評価したため、学習と評価(RMSEの計算)は55×5=275回行っています。
結果は想定通り、相関が高い列は数値予測アルゴリズムで精密(精密さはパラメータで指定します)に予想した方が精度が高く、相関がほぼ0な列では時間をかけて学習したモデルより、単純な列毎の中央値の値の方が精度が良い、もしくはほぼ変わりなしという結果になりました。
実際にデータ補完を依頼される場合には、これで終わりではなく、結果をレポートにまとめ、特に相関が0に近いデータ列について、お客様によくよくヒアリングを行い、相関が0になる理由や、データ自体が間違っている可能性がないか、相関が高くなる可能性があるデータを追加できないか等、追加検討し、より精度の高いモデルの構築を目指します。
ともあれ、仮説がぴったり当たっているととても気持ちがいいものです。
データ状態の確認から、仮説、仮説検証の道筋を綺麗に書けたのと、これに沿って構築したモデルの予測値スコアが上場の結果だったため、公開したNotebookに対しシルバーを獲得することができました。upvoteいただいた方に感謝です。

今後もKaggle活動記録を追加していきますのでお楽しみに!

————————————————–
自己紹介
所属:株式会社アイティーシー データアナリティクス事業部
経歴:約6年間、SEとして基幹システムの運用保守、開発を担当していました。
データサイエンティストへのキャリアチェンジを試み、日々奮闘中です。
Kaggleアカウントページはこちら:https://www.kaggle.com/imnaho
LinkedInページはこちら:https://www.linkedin.com/in/naho-oka-9ba89322b/