機械学習初心者におすすめなkaggleの表形式データセットを調査してみた

機械学習の学ぶとき、まず最初に取り掛かるのは表形式のデータであることが多いと思います。  
その時使うデータって、以下のようなものが多いのではないでしょうか。

- Titanic
- Iris
- Boston Housing
- Wine
- Breast Cancer

これらのデータを使って機械学習の手法やテクニックを覚えた後は、色々なデータを使って覚えた手法を試したくなります。
ですが、ちょうどよいデータってなかなか見つからず、データを探しているうちに勉強熱が冷めることもしばしば。。  
特に教員をやっていると、学生向けに演習問題をたくさん用意したいのですが、その題材が見つからないといったことが頻繁に起こります。  

そこで、kaggleにある表形式のデータセットの中から初心者向きそうだと感じたものをいくつか調べました。 
皆さんの機械学習の勉強や、誰かに教える際の演習問題の材料として参考にしてください。
コメントは自分用のメモなので、あくまで参考程度に。

また分析した結果をまとめたnotebookは以下から取得できます。

https://github.com/daifukusan/tabular_datasets_and_ML

この他にも有用なデータセットをご存じでしたら教えていただければ幸いです。

## UFO Sightings
- 分類問題、ただし難易度は相当高そう
- 欠損値あり。いくつかの特徴量に少量のずつ
- ほとんどがカテゴリカルデータのため、ラベルエンコーディング、Onehotエンコーディングの練習に向いてる
- datetimeから年/月/日の分離やさらに周期性を考慮したsin,cos変換などやっても面白そう

https://www.kaggle.com/datasets/NUFORC/ufo-sightings/code?select=scrubbed.csv

## Possum Regression
- 正解ラベルをどれにするか指定はないが、分類問題向き
- いくつかの特徴量に少量の欠損値あり
- カテゴリカルデータは2項目
- データ数が少ないためか、機械学習を行ってもあまり精度が出ない印象
- このデータで分析した他人のコードで、データの歪みによる影響とboxcox変換を初めて知った

https://www.kaggle.com/datasets/abrambeyer/openintro-possum

## Logistic Regression
- 分類問題(2クラス)
- 名前の通り、ロジスティック回帰(線形分離)で解ける小規模データセット
- 欠損値なしでラベル項目は1つなので、前処理は簡単
- データの標準化で精度が上がることを確認できる良い例

https://www.kaggle.com/datasets/dragonheir/logistic-regression

## Revisiting a Concrete Strength regression
- 回帰問題
- 欠損値なし、カテゴリカルデータなし
- 形式としては、Boston Housingと同じ
- ただし、線形モデルでは精度が上がらないので、適切なモデル選択の重要性を示す具体例として使えそう

https://www.kaggle.com/datasets/maajdl/yeh-concret-data

## Medical Cost Personal Datasets
- 回帰問題
- 欠損値なし
- カテゴリカルデータは3つ。一つはOnehot向きで残りは0-1変数
- PCAで寄与率80%で切ってから回帰やったら精度が極端に落ちた

https://www.kaggle.com/datasets/mirichoi0218/insurance

## Car Price Prediction Multiple Linear Regression
- 回帰問題
- 欠損値はなし
- カテゴリカルデータが多い。前処理が大変。
- カテゴリのエンコーディングは、車の知識があると適切な手法を選べそう。
- CarNameからメーカー名を取るなどすると良いかも

https://www.kaggle.com/datasets/hellbuoy/car-price-prediction

## Red Wine Quality
- 分類問題(多クラス)
- いわゆるWine問題とは別だが、やってることはほぼ同じ
- 欠損値もカテゴリカルデータもないので、すぐに機械学習を実行可能
- さらっと試した感じだと精度が出ない(60%程度)。標準化、PCAを試してもあまり変化なし

https://www.kaggle.com/datasets/uciml/red-wine-quality-cortez-et-al-2009

## Human Resources Data Set
- 回帰問題(パフォーマンスを予測する場合)
- 欠損値あり(ManagerIDの欠損値の処理は初心者向けのいい題材)
- 列数が多いので、相関係数などの分析から特徴量の絞り込みが必要
- 適当にやると、全然精度が上がらない

https://www.kaggle.com/datasets/rhuebner/human-resources-data-set?datasetId=1632&sortBy=voteCount

## Collection of Classification & Regression Datasets
分類問題、回帰問題に使えるデータセットの詰め合わせ
使えそうなデータがいくつかあるものの、列の説明がないので列名から推測するしかないのが難点

https://www.kaggle.com/datasets/balakrishcodes/others?select=MBA_ADMISSIONS.csv

詰め合わせの中から使えそうなものを抜粋

### canada_per_capita
- 回帰問題
- 1変数のため単回帰分析
- 欠損値なし
- PipelineとPolynomialFeaturesを使って多項式回帰を使ういい勉強になった。

### daily-min-temperatures
- 回帰問題
- 欠損値なし
- 唯一の変数はDateのみ、これをどう扱うか
- 時系列予測として、LSTMやTransformerにかけるのが定石か
- 試しに月、日をsin,cos変換したけど精度は悪かった

### House_price
- 回帰問題
- 欠損値は1列のみあり
- カテゴリカルデータは3つ。waterbodyのエンコーディングは少し工夫できそう
- いくつかのデータが歪んでいるので、boxcox変換も有効かも

### MBA Admissions
- 回帰も分類も可能
- 欠損値はなし
- カテゴリカルデータは列全体の約半数
- Gender, Marital_statusをGradientBoostingで分類したところ100%を出せた

### Movie classification
- 名前から分かる通り分類問題(2クラス)
- 欠損値は1列だけ、欠損値の個数も少なめ
- カテゴリカルデータは2つ
- 精度はどの手法でも50%程度、他の人のコードによるとLightGBM使うと70%くらいは出せる
　→ 調整したら、LogisticRegressionで65%出せた
- Start_Tech_Oscarって何？？

### Movie Regression
- 上の回帰Ver、target以外はすべて同じ

### us-airlines-monthly-aircraft-miles-flown
- 回帰問題(時系列)
- 欠損値なし
- 唯一の特徴量が年月を表す文字列
- 折れ線グラフにすると季節性とトレンドがわかりやすく見れる

## Life Expectancy (WHO)
- 回帰問題
- 殆どの列に欠損値あり。行で見ても4割近くが欠損あり。ただし中央値埋めでも結構精度出る
- カテゴリカルデータは国名ともう一つ。
- 国の貧富、教育と寿命の相関が見えるのが興味深い

https://www.kaggle.com/datasets/kumarajarshi/life-expectancy-who?datasetId=12603&sortBy=voteCount

## Stroke Prediction
- 分類問題(2クラス)
- 欠損値は1列だけ。全体の3%程度の行数
- カテゴリカルデータは全体の3~4割程度
- 陽性クラスと陰性クラスのデータ数が大きく異なる(1:19)。
- 考えずにやると、accuracyは9割超えだが、全部陰性と予測しただけとなる典型例
- 教師なし異常検知などの題材としても良さそう

https://www.kaggle.com/datasets/fedesoriano/stroke-prediction-dataset

## Mushroom Classification
- 分類問題(2クラス)
- 欠損値はなし
- すべてがカテゴリカルデータという変わったデータ
- 何も考えずに全列One-hotエンコーディングしたら、結構良い結果が出た。

https://www.kaggle.com/datasets/uciml/mushroom-classification?datasetId=478&sortBy=voteCount

## Mobile Price Classification
- 分類問題(多クラス)？ (名前は分類だけど、たぶん回帰で解いても良さそう)
- 欠損値なし
- カテゴリカルデータなし
- 標準化してからLogisticRegressionですると、格段に精度が上がった

https://www.kaggle.com/datasets/iabhishekofficial/mobile-price-classification

## HR Analytics: Job Change of Data Scientists
- 分類問題(2クラス)
- 別で紹介したHuman Resources Data Setとは違うが同じヒューマンリソース系
- 欠損値あり。しかも、カテゴリカルデータにあるので、扱いが難しい
- カテゴリカルデータは全体の7割程度。
    工夫すれば、順序が定まるものもあるので、前処理による性能差が大きそう
- 適当に全部one-hotにして7割強程度の精度
    RandomForestはPrecisionが0%になるなど、あまり有効ではなかった

https://www.kaggle.com/datasets/arashnic/hr-analytics-job-change-of-data-scientists?select=aug_train.csv

## Water Quality
- 分類問題(2クラス)
- 欠損値あり(phは重要な指標そうにみえるので、どう扱うかが重要か)
- カテゴリカルデータなし
- 正解率はどの手法も6割程度で思ったより難しい問題らしい

https://www.kaggle.com/datasets/adityakadiwal/water-potability

## The Complete Pokemon Dataset
- 分類問題(2クラス)？ 特に使い方は指定されていないが、伝説ポケモンの判定の使い方はできる
- 欠損値あり
- カテゴリカルデータあり。ポケモンを知っている世代であれば、特徴量を適切に処理できそう。
- 第7世代までの802匹が対象
- 試しにやってみたら、意外と精度が高くてびっくりした
- RandomForestの分類寄与率とかを見るとポケモン好きは興味もちそう

https://www.kaggle.com/datasets/rounakbanik/pokemon

## Campus Recruitment
- 分類問題(2クラス)、回帰問題の両方
- 欠損値あり
- カテゴリカルデータはあるが、どれもユニーク数が2～3程度なので、0-1 or one-hotで迷わずできる。
- 適当に作ったモデルでも精度100%達成できた

https://www.kaggle.com/datasets/benroshan/factors-affecting-campus-placement?datasetId=596958&sortBy=voteCount

## Airline Passenger Satisfaction
- 分類問題(2クラス)
- 欠損値あり、1特徴量に少量
- ただし、Nanではないものの、アンケートの1～5の5段階評価の中に0(該当なし)がある
- カテゴリカルデータは5つ。全体からするとそこまで多くはない
- RandomForestやGradientBoostingでは正解率が9割を超える
- データ数が多い(>10万件)ためか、SVCは時間がかかりすぎて断念した

https://www.kaggle.com/datasets/teejmahal20/airline-passenger-satisfaction

## Bank Marketing
- 分類問題(2クラス)
- 欠損値なし
- カテゴリカルデータが多く、値のバリエーションが多いのでOne-hotにすると列が多くなりすぎる
- データの重複あり
- 正解ラベルの陽性と陰性に偏りあり(1:9)
- 試しにSMOTEを使ってみたところ、F1値が10%程度改善された(50%→60%)

https://www.kaggle.com/datasets/henriqueyamahata/bank-marketing

## Glass Classification
- 分類問題(多クラス)
- 欠損値なし
- カテゴリカルデータなし
- データの重複あり
- 分類対象のクラス数が多いため、精度が上がらず8割弱

https://www.kaggle.com/datasets/uciml/glass

## Fetal Health Classification
- 分類問題(多クラス)
- 欠損値なし
- カテゴリカルデータなし
- 正解ラベルは1,0,-1の3種類だが、読み込み時はfloatで定義されているのでintに変換が必要
- データの重複あり
- 雑にやって精度は9割出せる。

https://www.kaggle.com/datasets/andrewmvd/fetal-health-classification

## Top Hits Spotify from 2000-2019
- 回帰？(特に正解ラベルとなる列は指定されていない。popularityを予測する場合は回帰)
- 欠損値なし
- カテゴリカルデータは少ないがある
- genre列をダミー変数化する方法は[こちら](https://qiita.com/SNakano/items/d7cba6552c00977dcda7)が参考になった
- 解いた結果で決定係数の値がマイナスになった。調べてみるとあり得ることらしいが、モデル化に問題ありそう

https://www.kaggle.com/datasets/paradisejoy/top-hits-spotify-from-20002019/code

## Drug Classification
- 分類問題(多クラス)
- 欠損値なし
- カテゴリカルデータは多めだが、そもそも特徴量の数が少ない
- 適当に前処理して実行すると、97%程度の正解率になる
- ここまで実行して初めて知ったが、正解ラベルデータは文字列のまま渡せるのね。。。

https://www.kaggle.com/datasets/prathamtripathi/drug-classification