【ディープラーニング】データを10000件から45000件に増やしたら的中率が下がってしまいました。
以前スクレイピングを学び、データ収集がとても楽になりました。
そこで、以前から取り組んでいる競艇予想のデータ数を増やそうと考えました。
元のデータは2020年3月から2019年6月のデータ約10000件。
今回追加したデータは2020年4月と2019年5月から2017年1月までのデータです。
何年も前のデータを利用することはあまり良く無いのかもしれないと思いましたが、選手個人の統計ではなく、勝率や年齢などの統計から導き出される予測なので過去のデータも有益だと考えました。
スクレイピングのソースコードは過去記事に載せていますので下記リンクから参照してください。
gorilland-k.hatenablog.com
これによってデータ数が45000件になりました。
データを増やしすぎると良くないのはわかっていましたが、私の中で最適なデータ数は4~5万件だったので、いい結果がでると考えていました。
しかし、実際に45000件のデータで学習させてみると、的中率が激減してしまいました。
言葉で説明するよりもプロットしてみた方がわかりやすいので、簡単に可視化してみます。
import matplotlib.pyplot as plt # 10000件 fig, ax = plt.subplots() ax.plot([1, 2, 3, 4, 5, 10, 11, 12, 13], [19700, 16100, 15300, 17000, 15400, 15700, 20100, 28000, 29500] , label = "10000_sample") # 40000件 ax.plot([1, 2, 3, 4, 5, 10, 11, 12, 13], [11500, 9900, 8100, 7700, 6700, 6900, 7600, 14500, 12500], label="45000_sample") ax.set_xlabel("Date") ax.set_ylabel("Income and expenditure") ax.legend();
明らかに収支が激減していることがわかります。
データ数10000件の収支29500円に対して、データ数45000件の収支は12500円と明らかな差が発生しています。
ではなぜ、データ数を増やしたにもかかわらず、的中率が下がってしまったのでしょうか。
ここからは私の考察です。
ディープラーニング学習の素材として使うMNISTのデータは50000~60000件などのデータが多数存在します。
このMNISTのデータを用いて、最適なプログラムを作ると最終的な正解率は99.6%ほどまであげることができます。
それに対して、私がスクレイピングしたデータで学習させると、どれだけチューニングしても予測の分類率は20~80%とまばらです。
平均的には、20~50% 高くて80%ほどとなります。
この分類率がまばらになってしまう原因として、バイアス*1がかかっていると私は考えます。
この場合においてのバイアスは、
- 当日の選手の調子
- 当日の天気
- 人間関係
- etc...
など様々な要因から起きていると考えられます。
天気ならまだしも、選手の調子をデータに起こすのはなかなか難儀なものです。
要するに、このバイアスが的中率に大きな影響を与えている可能性があります。
データ数を増やしてしまうと、バイアスの影響を受けたデータが増えてしまう可能性が大きくなっていきます。
よって最終的に、データ全体がバイアスに影響されてしまった結果、的中率を大きく下げてしまう結果に陥ってしまったんだと考えます。
実際に40000件の分類率を確認してみると、10000件のデータの分類率よりも全てにおいて下回っていました。
バイアスの影響を受けて私の作ったプログラムも分類しにくくなってしまっているのだとおもいます。
なので、この先はバイアスの影響を受けてはいるが、最適なデータ数とそれにあったモデルの作成に努めたいと思います。
*1:考え方の偏り