レースの未来予測（がしたかった※失敗）

# 概要
全国で開催されるレースの結果を予測するための人工知能モデルを作成
しました
に失敗しました。
今回はある程度のデータが集まったので、その履歴を残します。

### 目的
* 今後の開発、研究のための資金調達
* 遊ぶ金欲しさに

### 生データ
* 直近1年分の全国で開催されたレースの前情報とその結果（約１３０００レース）

### 前処理
* 出走数を18に固定
* 前情報の項目数の最大値に合わせて次元を調整
* 全項目を文字列化 ⇒ 文字コード化
* 使用している文字の文字コードの最大値＋αの値で正規化

## 各モデルのネットワークとその結果
### ケース①
~~~
Model: "sequential"

_________________________________________________________________
 Layer (type)                Output Shape              Param #   
=================================================================
 flatten (Flatten)           (None, 86400)             0                                                                        

 dense (Dense)               (None, 1000)              86401000  
                                                                 
 dense_1 (Dense)             (None, 100)               100100    
                                                                 
 dense_2 (Dense)             (None, 18)                1818      
                                                                 
=================================================================
Total params: 86,502,918
Trainable params: 86,502,918
Non-trainable params: 0
~~~
![20230317_1531_loss.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1852162/71b4a595-9438-4b6d-b408-51722529eb81.png)

### ケース②
~~~
Model: "sequential"
_________________________________________________________________
 Layer (type)                Output Shape              Param #   
=================================================================
 flatten (Flatten)           (None, 86400)             0         
                                                                 
 dense (Dense)               (None, 1000)              86401000  
                                                                 
 dropout (Dropout)           (None, 1000)              0         
                                                                 
 dense_1 (Dense)             (None, 100)               100100    
                                                                 
 dropout_1 (Dropout)         (None, 100)               0         
                                                                 
 dense_2 (Dense)             (None, 18)                1818      
                                                                 
=================================================================
Total params: 86,502,918
Trainable params: 86,502,918
Non-trainable params: 0
_________________________________________________________________
~~~
![20230318_0029_loss.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1852162/9d4ec069-d766-efe5-d5bf-64412e6cf015.png)

### ケース③
~~~
Model: "sequential"
_________________________________________________________________
 Layer (type)                Output Shape              Param #   
=================================================================
 flatten (Flatten)           (None, 86400)             0         
                                                                 
 dense (Dense)               (None, 1000)              86401000  
                                                                 
 dropout (Dropout)           (None, 1000)              0         
                                                                 
 dense_1 (Dense)             (None, 1000)              1001000   
                                                                 
 dropout_1 (Dropout)         (None, 1000)              0         
                                                                 
 dense_2 (Dense)             (None, 100)               100100    
                                                                 
 dropout_2 (Dropout)         (None, 100)               0         
                                                                 
 dense_3 (Dense)             (None, 18)                1818      
                                                                 
=================================================================
Total params: 87,503,918
Trainable params: 87,503,918
Non-trainable params: 0
_________________________________________________________________
~~~
![20230318_1116_loss.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1852162/8e809f37-3c02-cbb1-79ec-6dd965613870.png)

### ケース④
~~~
Model: "sequential"
_________________________________________________________________
 Layer (type)                Output Shape              Param #   
=================================================================
 flatten (Flatten)           (None, 86400)             0         
                                                                 
 dense (Dense)               (None, 1000)              86401000  
                                                                 
 dropout (Dropout)           (None, 1000)              0         
                                                                 
 dense_1 (Dense)             (None, 1000)              1001000   
                                                                 
 dropout_1 (Dropout)         (None, 1000)              0         
                                                                 
 dense_2 (Dense)             (None, 1000)              1001000   
                                                                 
 dropout_2 (Dropout)         (None, 1000)              0         
                                                                 
 dense_3 (Dense)             (None, 100)               100100    
                                                                 
 dropout_3 (Dropout)         (None, 100)               0         
                                                                 
 dense_4 (Dense)             (None, 18)                1818      
                                                                 
=================================================================
Total params: 88,504,918
Trainable params: 88,504,918
Non-trainable params: 0
_________________________________________________________________
~~~
![20230318_1350_loss.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1852162/865bda90-a6e7-0e32-92d4-66bdf9b20ce8.png)

### ケース⑤
~~~
Model: "sequential"
_________________________________________________________________
 Layer (type)                Output Shape              Param #   
=================================================================
 flatten (Flatten)           (None, 86400)             0         
                                                                 
 dense (Dense)               (None, 2000)              172802000 
                                                                 
 dropout (Dropout)           (None, 2000)              0         
                                                                 
 dense_1 (Dense)             (None, 1000)              2001000   
                                                                 
 dropout_1 (Dropout)         (None, 1000)              0         
                                                                 
 dense_2 (Dense)             (None, 100)               100100    
                                                                 
 dropout_2 (Dropout)         (None, 100)               0         
                                                                 
 dense_3 (Dense)             (None, 18)                1818      
                                                                 
=================================================================
Total params: 174,904,918
Trainable params: 174,904,918
Non-trainable params: 0
_________________________________________________________________
~~~
![20230318_1547_loss.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1852162/32951f9d-5372-c868-c06f-db618457147f.png)

### ケース⑥
~~~
Model: "sequential"
_________________________________________________________________
 Layer (type)                Output Shape              Param #   
=================================================================
 flatten (Flatten)           (None, 86400)             0         
                                                                 
 dense (Dense)               (None, 2000)              172802000 
                                                                 
 dropout (Dropout)           (None, 2000)              0         
                                                                 
 dense_1 (Dense)             (None, 1000)              2001000   
                                                                 
 dropout_1 (Dropout)         (None, 1000)              0         
                                                                 
 dense_2 (Dense)             (None, 100)               100100    
                                                                 
 dropout_2 (Dropout)         (None, 100)               0         
                                                                 
 dense_3 (Dense)             (None, 18)                1818      
                                                                 
=================================================================
Total params: 174,904,918
Trainable params: 174,904,918
Non-trainable params: 0
_________________________________________________________________
~~~
![20230319_0040_loss.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1852162/b506b1e8-8d64-27b3-8e98-55db7305c527.png)

### ケース⑦
~~~
Model: "sequential"
_________________________________________________________________
 Layer (type)                Output Shape              Param #   
=================================================================
 flatten (Flatten)           (None, 86400)             0         
                                                                 
 dense (Dense)               (None, 3000)              259203000 
                                                                 
 dropout (Dropout)           (None, 3000)              0         
                                                                 
 dense_1 (Dense)             (None, 1000)              3001000   
                                                                 
 dropout_1 (Dropout)         (None, 1000)              0         
                                                                 
 dense_2 (Dense)             (None, 100)               100100    
                                                                 
 dropout_2 (Dropout)         (None, 100)               0         
                                                                 
 dense_3 (Dense)             (None, 18)                1818      
                                                                
=================================================================
Total params: 262,305,918
Trainable params: 262,305,918
Non-trainable params: 0
_________________________________________________________________
~~~
![20230320_0158_loss.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1852162/559c2f09-1308-4130-6e63-680ae1158ab6.png)

# まとめ
見ての通り誤差が下がってはいますが、理想的な数値にまでは至っていません。
また、今回は載せていませんが、精度の方も収束しなかったです。
今回得られたことは以下の通り。

* メモリが足りない　　
16GBの自作機ですが、今回は画像認識ではないため畳み込みができず、
すべて全結合で行っているため、ユニットの数が足りませんでした。
* ラベリングが必要
データセットの値をラベル化せず、すべて1文字ずつ文字コード化してラベリングをサボったのも、入力変数の増大につながりました。
結果的に、入力変数の数は約86,000近くになりました。
* ネットワークの貧弱さ
上記、入力変数の多さから、メモリ不足のために最初の全結合層のユニット数を3000以上にできませんでした。
理想としては10,000は欲しいところです。
* ネットワークについて
ある程度は予想通りでした。
Dropoutレイヤーをある程度追加すると過学習が発生しないため、エポック数を増やせる。
全結合層のみによる深層学習では、3層以上の多層化ではあまり結果に影響しない。
最初の層でどれだけユニットを設定できるかが肝心。
ラベリングをモデル内で担保するにはユニット数が圧倒的に足りない。
ラベリングしたうえで、入力変数を減らす必要がある。