【第34回_Beginner限定コンペ】携帯電話の機能データからの価格帯分類
問題概要
SIGNATE主催のBeginner限定コンペで、下から3段階目のIntermediateに昇格するためのコンペティション
結果
個人参加で、246人投稿中30位であった。
Public LBで一定のスコアを達成することが昇段条件であった為、達成を確認後クローズとした。
入出力
携帯電話の特徴量(計20個)から価格帯を0から3の間で予測する。
評価指標はF1スコアであり、recallとprecisionの調和平均である。
目的変数が序数であることから自然な評価指標に思える。
入出力のファイルはすべてCSVで、構成としては以下の通り。
- train.csv
- test.csv
目的変数を含めた特徴量を以下の表に示す。
列番号 | 列名 | データ型 | 説明 |
---|---|---|---|
0 | id | int | インデックス(識別子として使用) |
1 | battery_power | int | バッテリーの一充電での合計エネルギー容量(mAh) |
2 | blue | int | Bluetoothの利用可能性(利用可能な場合は1) |
3 | clock_speed | float | クロック速度 |
4 | dual_sim | int | Dual SIMサポートの利用可能性(利用可能な場合は1) |
5 | fc | int | フロントカメラのメガピクセル数 |
6 | four_g | int | 4Gサポートの利用可能性(利用可能な場合は1) |
7 | int_memory | int | 内部メモリ(GB) |
8 | m_dep | float | モバイルの奥行き(cm) |
9 | mobile_wt | int | 重量 |
10 | n_cores | int | コア数 |
11 | pc | int | プライマリカメラのメガピクセル数 |
12 | px_height | int | ピクセル解像度の高さ |
13 | px_width | int | ピクセル解像度の幅 |
14 | ram | int | ランダムアクセスメモリ(MB) |
15 | sc_h | int | モバイルの画面高さ(cm) |
16 | sc_w | int | モバイルの画面幅(cm) |
17 | talk_time | int | 連続通話時間 |
18 | three_g | int | 3Gサポートの利用可能性(利用可能な場合は1) |
19 | touch_screen | int | タッチスクリーンの利用可能性 |
20 | wifi | int | Wi-Fiの利用可能性(利用可能な場合は1) |
21 | price_range | int | 価格帯:ターゲット0(低価格)、3(非常に高価格) |
データ分析
- データ数の確認:訓練データが1200、テストデータが800
- 欠損の有無:なし
- 分布のヒストグラムの確認
使用したモデル
モデルには、LightGBMを使用した。
LightGBMとは、Kaggleで人気の決定木ベースの勾配ブースティングアルゴリズムである。
他にも精度は奮わなかったが、全結合ニューラルネットワーク、最近傍法も実装した。
工夫した点
実験を効率的に行う為に、ディレクトリ構成を工夫した。
具体的には、
- 前処理、モデルのモジュール化
- 実験はすべてrun.pyで行うように設計した
- configファイルを実装し、ハイパーパラメータの制御を行う
- 実験結果はログ・モデル・提出ファイルをresultファイルに出力する
他参加者から吸収したこと
ディレクトリ構成の考案、昇段することが目的であったためコンペティション終了後のトレース等は行っていない。
そもそもBeginner限定コンペで下から3段階目のIntermediateに昇格するためのコンペティションであり、他解放がそこまで参考になるとも思えなかった。
ソースコード