KZ
bin
Негізгі бет
Қазірдің өзінде танымал
Тікелей эфир
Ұнаған бейнелер
Қайтадан қараңыз
Жазылымдар
Кіру
Тіркелу
Ең жақсы KZbin
Фильм және анимация
Автокөліктер мен көлік құралдары
Музыка
Үй жануарлары мен аңдар
Спорт
Ойындар
Комедия
Ойын-сауық
Тәжірибелік нұсқаулар және стиль
Ғылым және технология
Жазылу
競馬予想で始めるデータ分析・機械学習
競馬予想AIを1から作ることを通して、機械学習・データサイエンスの勉強ができるチャンネル。「予測モデルをどう作るか」だけでなく、データを取ってくるスクレイピングや、実際にデータを使える形にするデータ加工の方法なども解説・実況していきます。
44:58
【リメイク版#16】特定条件における馬の過去成績を特徴量に追加する【競馬AI開発】
14 күн бұрын
58:15
【リメイク版#15】騎手と調教師の過去成績を特徴量に追加する【競馬AI開発】
28 күн бұрын
32:49
【リメイク版#14】LightGBMのハイパーパラメータって結局どうすれば良いの?【競馬AI開発】
Ай бұрын
38:42
【リメイク版#13】特徴量追加で押さえるべき4つのパターンとは?【競馬AI開発】
Ай бұрын
26:56
【リメイク版#12】競馬予想AIには何年間のデータを学習させるべきか?
2 ай бұрын
46:58
【リメイク版#11】的中率・回収率のシミュレーションを作成する【競馬AI開発】
2 ай бұрын
44:28
【リメイク版#10】払い戻しテーブルの取得・前処理【競馬AI開発】
3 ай бұрын
39:10
【リメイク版#9】競馬予想AIがついに完成!実際の予測時のコードを作成する
3 ай бұрын
30:06
【リメイク版#8】機械学習モデルを作成して単勝馬券を予測する【競馬AI開発】
4 ай бұрын
23:16
【リメイク版#7】Pythonの「クラス」とは?初心者向けに徹底解説
4 ай бұрын
26:51
【リメイク版#6】馬の過去成績の集計方法・レース情報テーブルの取得【競馬AI開発】
5 ай бұрын
28:23
【リメイク版#5】データ加工の決定版!レース結果/馬の過去成績テーブルの前処理【競馬AI開発】
5 ай бұрын
46:01
【リメイク版#4】馬の過去成績テーブルを取得する【競馬AI開発】
5 ай бұрын
43:52
【リメイク版#3】1年分のレース結果データをまとめて取得する方法【競馬AI開発】
6 ай бұрын
40:09
【リメイク版#2】ChromeDriverによるレースid一覧のスクレイピング【競馬AI開発】
6 ай бұрын
35:49
【リメイク版#1】レース開催日一覧をスクレイピング【競馬AI開発】
7 ай бұрын
42:39
【開発・運用編#4】「定数モジュール」はなぜ必要?変更に強いコードを書く方法
Жыл бұрын
25:24
【開発・運用編#3】Pythonコードを自動修正!コードフォーマッターの導入方法・使い方
Жыл бұрын
15:12
新しいバージョンの競馬予想AIが完成しました
2 жыл бұрын
45:54
【開発・運用編 #2】ソースコードのモジュール化とは?メリットや実装の様子を紹介【Python】
2 жыл бұрын
54:56
【開発・運用編 #1】運用しやすい機械学習モデルを作るには?まずやるべきことを解説
2 жыл бұрын
42:24
【第31回】競馬予想AIの回収率シミュレーション関数を作り直す
3 жыл бұрын
44:34
【第30回】競馬予想AIに馬単・ワイド・三連複・三連単の賭け方を追加する
3 жыл бұрын
35:19
【第29回】競馬予想AIにデータを追加して比較する方法
3 жыл бұрын
9:29
【機械学習入門】競馬予想AIを作るのに必要な知識・勉強は何か
3 жыл бұрын
43:53
【第28回】投資に使われる指標「シャープレシオ」を使って良い賭け方を見極める
3 жыл бұрын
29:20
【第27回】機械学習で使ってはいけないデータとは?
3 жыл бұрын
48:06
【第26回】機械学習の王道テクニック:馬の得意なコースを判定させる方法とは?
3 жыл бұрын
49:38
【第25回】Target Encodingを利用して競馬予想AIの精度を上げる【機械学習】
3 жыл бұрын
Пікірлер
@tomofishing826
11 сағат бұрын
リメイク版の前のシリーズでもあまり詳しく取り上げられていなかったので、作成したモデルで実際に予測する流れとかどういうスコアの馬に賭けるかとかを見たいです!
@hrsm6535
13 сағат бұрын
毎回更新を楽しみに視聴しております。競馬素人なのですがコースの特徴量で「コース替わり」とか「開幕週」を入れても良さそうな気がしました。芝の状態も予想要因の一因になると聞いたことがあります。
@ぱかぱかくん
13 сағат бұрын
神コンテンツ
@競馬予想で始めるデータ分析
17 сағат бұрын
📘動画中のソースコードや補足解説はこちら note.com/dijzpeb/n/n3dec8db074f8 📘目次 0:00 今回やること 3:12 血統データのスクレイピング 14:04 血統テーブルの前処理 20:03 リーディングテーブルの前処理 34:46 特徴量作成 44:29 血統データの学習・精度検証 47:08 レース種別(芝/ダート/障害)ごとの成績特徴量の検証 📘関連動画 kzbin.info/www/bejne/iaqVanSoidR3p5Y
@flashnewlight1075
Күн бұрын
素晴らしい! それにしても変数を見つけてテストしていくのが大変ですね。 単勝いいですね。
@haraoki4434
3 күн бұрын
たのしくくりかえし拝見しています。
@kosukefukuda-m4w
4 күн бұрын
特徴量の作成も面白いですが、最後に触れていたデータの分析も興味あるので早く見たいです!お時間許せばお願いします!
@kosukefukuda-m4w
4 күн бұрын
特徴量が増えすぎてついにメモリ不足のエラーが出ました(笑)
@haraoki4434
3 күн бұрын
よろしければawsでやっては? 私はまだやっていませんが、予定しています。
@kosukefukuda-m4w
2 күн бұрын
@@haraoki4434 同時にawsの知識も付きそうなのでやってみたいですね。pc買い替えるよりかは安いでしょうし
@競馬予想で始めるデータ分析
Күн бұрын
なんと...(笑) そろそろ使用メモリも配慮しなければいけないかもしれないですね ちなみに、メモリは何GBのPCを使用されていますか? あと、使用データの行数・カラム数は動画中と同じですか?
@kosukefukuda-m4w
Күн бұрын
@@競馬予想で始めるデータ分析 8GBのノートpcです(泣) 若干自作した特徴量を入れているので増えてはいます。 削れる特徴量は削って一回シャットダウンすれば何とか動きました。 十分に作り込めないのはストレスなので、一旦aws使ってみようと思います。
@kers574
4 күн бұрын
当日予測処理の予測でエラーとなります。 noteと動画を見返してますがわからないので教えていただきたい。 また、features_prediction.csvの中には1行めの情報しか入ってません。 わかりやすい説明をしていただけると助かります。よろしくお願いします。
@kers574
3 күн бұрын
後、申し訳ないのですがv3_0_5の使い方の説明動画が欲しいです! 各versionのmainのコードの実行は完了してますが予測箇所でエラーとなってしまいます。 また、土日当日に行わなければならないこと、終了したレース情報の追加のやり方など、、、(最新のレース情報にするには) 始めたばかりで分からないので優しく教えていただきたいです。
@kosukefukuda-m4w
5 күн бұрын
6:00 リスト内包表記 43:00 yaml小技 odds,popあり 0.205 なし 0,225
@かざ-s5e
5 күн бұрын
こんばんは、とても勉強になる動画ありがとうございます。 一つご質問あります。レースクラスはどのデータを使ってクラス分けされていますか? お時間あるときでいいので回答お願いします。
@競馬予想で始めるデータ分析
Күн бұрын
記事のコード中のcommon/data/mapping/race_class.jsonで分類しています!
@kosukefukuda-m4w
5 күн бұрын
27:45 検索一括コメントアウト 11:00 データの抽出 0.221
@おりょう-z4h
6 күн бұрын
これってiPhoneでも可能ですか?
@競馬予想で始めるデータ分析
Күн бұрын
pythonistaというツールを使えまiphoneでもpython自体は使えるらしいのですが、ストレージ・メモリが足りない気がするので、あまりおすすめできないですね...
@kosukefukuda-m4w
7 күн бұрын
質問です。 期待値を求めるためにpredの値を利用することを試みていますが、人気のない馬もある程度predが高い(数%程度)のでオッズと掛け合わせるととても大きな値になってしまいます。 (例:オッズが400倍の馬のpredが0.05程度あり、掛け合わせると20程度になる。) このせいで最低人気の馬ばかり期待値が最大となる。 問題はpredの値が満遍なく高いことにあります。 何とかpredのばらつきを大きくしようとハイパーパラメータの調整を試みましたが今一つこの問題を解決できません。 下位予想の馬のpredを下げる方法についてアイデアをいただきたいです。
@競馬予想で始めるデータ分析
Күн бұрын
「predの値が満遍なく高い」ことが問題になるのは、「実際の勝率に比べてpredが上振れてしまっている」場合だと思うのですが、(もし、実際に勝率が0.05程度であれば、期待値としては正しいものが計算出来ていることになる)例えば最低人気の馬について実際の勝率とpredの平均値を比べてみるとどうなりますか? これに開きがあるようであれば、最低人気の馬の勝率を正しく予測できていないことになるので、対処したいですね。 そのうち動画で扱おうと思っていますが、まずは「キャリブレーション」というものを確認してみると良いと思います。 参考記事: qiita.com/0NE_shoT_/items/c42d8093e2fed9bf1b7a#%E3%83%AD%E3%82%B8%E3%82%B9%E3%83%86%E3%82%A3%E3%83%83%E3%82%AF%E5%9B%9E%E5%B8%B0%E3%83%A2%E3%83%87%E3%83%AB%E3%81%AE%E6%80%A7%E8%83%BD%E8%A9%95%E4%BE%A1
@kers574
10 күн бұрын
flake8とblack formatterのインストールはできたと思うのですが設定に出て来ません。 どうしたらいいですか? 調べてもわからなかったため質問させていただきました。
@haraoki4434
11 күн бұрын
ページの読み込みとデータの抽出をひとつの関数にされてます。 これはわけてもよいですか? それとも分けない方がいいですか? 参考意見で伺いました。
@競馬予想で始めるデータ分析
11 күн бұрын
分けても良いと思います!
@haraoki4434
12 күн бұрын
実行して結果を確認いたしました。 ありがとうございます。 時間のある時の返信で結構ですので 疑問がでましたら質問をさせて頂きます。 よろしくお願いいたします。
@flashnewlight1075
13 күн бұрын
素晴らしい。 最高すぎる。
@競馬予想で始めるデータ分析
13 күн бұрын
📘動画中のソースコードや補足解説はこちら note.com/dijzpeb/n/n5cdec019f163 📘目次 0:00 はじめに 2:35 走破タイムの抽出 10:57 「同距離の最速タイム特徴量」の検証 28:48 「レース階級, 開催場所, etc. ごとの成績特徴量」の検証 📘関連動画 kzbin.info/www/bejne/iaqVanSoidR3p5Y kzbin.info/www/bejne/nHWwn4B7i76bkLs
@bb-lv1lm
14 күн бұрын
欲しい特徴量きました!! ありがとうございます
@flashnewlight1075
14 күн бұрын
素晴らしい! 面白く見ています。
@kers574
14 күн бұрын
払い戻しテーブルの前処理 df [["0", "1", "2"]] * replace(" (-|→) ", "-", regex=True) * replace",",””, regex=True) * apply (lambda x: x.str.split()) * explode( ["1", "2"]) * explode ("0") * apply (lambda x: x.str.split ("-")) * explode (["0", "2"]) Attribute error:can only use .ate accessor with string values! とエラーになります。 なぜでしょう?
@競馬予想で始めるデータ分析
13 күн бұрын
・演算子が.ではなく*になっていますが、上記のコードで実行しましたか? ・コメントアウトを利用して上から1行ずつ実行し、どの処理までは実行できているか確認してみてください!
@令和の馬
15 күн бұрын
的中率、回収率の結果が少し低いのですが、、、 これまで同じコードでやっていますが。。
@競馬予想で始めるデータ分析
15 күн бұрын
・どの程度低いですか?また、loglossはどうですか? ・動画・記事中で表示されるdataframeと行数・値などは一致していますか?(分かる範囲で) この辺り確認してみて、あまり差分がなさそうであれば、間違った処理はしていないと思うので、気にせず進めても良いと思います!
@flashnewlight1075
16 күн бұрын
素晴らしい作業だ。 全動画、見ています。
@kosukefukuda-m4w
19 күн бұрын
単勝以外の回収率の精度は改善しましたか?
@競馬予想で始めるデータ分析
18 күн бұрын
回収率はほぼ変わらないです!(まだ今の段階では馬券購入最適化していないので)
@kosukefukuda-m4w
21 күн бұрын
21:18 valid,testデータ切り分け
@kosukefukuda-m4w
24 күн бұрын
36:50どんな馬券を当てているか
@kosukefukuda-m4w
24 күн бұрын
自分用 2:40〜出馬表スクレイピング html→race_id→horse_id→スクレイピング 当日に出馬表から情報を取ってきて予想する際のコード作成 .values()→値を指定する。
@kosukefukuda-m4w
24 күн бұрын
自分用 6:00〜予想スコア上位の馬のボックスを買った場合のテーブル作成「包含関係」 23:00〜クラスにまとめる 払い戻しテーブルの下処理と種々の計算処理、データフレーム処理を学べる
@kers574
24 күн бұрын
質問失礼します。 noteの最新を買えば第1回からのコードが全て載ってるのですか? 最新版を購入し、不明な箇所があればその記事を買って行くという認識で合ってますか?
@競馬予想で始めるデータ分析
24 күн бұрын
1から動かすのに必要なコードが全て含まれているか?ということであれば合っています!(本動画中で触れられていないデータ取得や前処理などのコードも含まれています) ただし過去バージョンや過去の実験は載せていない(または、上書きされている)ので、厳密には「全て」ではない、というイメージです。 例えば#15の記事のコードに含まれるディレクトリは ・common/ ・v3_0_3/ ・v3_0_4/ ・v3_exp4/ で、 ・v3_0_0/〜v3_0_2/ ・v3_exp1/〜v3_exp3/ は入っていません。
@hiroshiaoyama1009
27 күн бұрын
予測結果に馬の名前も出力したいのですがどうすればいいでしょうか?
@競馬予想で始めるデータ分析
27 күн бұрын
fetch_results()内で、.iloc[:, 3]とかで取ってこれると思います!
@競馬予想で始めるデータ分析
28 күн бұрын
📘動画中のソースコードや補足解説はこちら note.com/dijzpeb/n/naf20bcde7777 📘目次 0:00 はじめに 1:52 騎手の過去成績データの取得 24:22 騎手の過去成績テーブルの前処理 31:50 騎手の過去成績を使った特徴量作成 43:54 学習・精度評価 51:20 調教師リーディングの追加 📘関連動画 kzbin.info/www/bejne/iaqVanSoidR3p5Y
@モッキー
Ай бұрын
いつもありがとうございます。create_return_tablesの処理結果の間に0.1 1.1 2.1 3.1 0.2 1.2 2.2 3.2 0.3 1.3 2.3 3.3 0.4 1.4 2.4 3.4 0.5 1.5 2.5 3.5(これらの下は空欄)が入ってしまいます。対処方法をおしえていただけませんか?
@モッキー
Ай бұрын
update_rawdfを外したらできました。
@kosukefukuda-m4w
Ай бұрын
ダウンロードしたソースコードに自分で考えた特徴量を追加して実験しているのですが、学習の段階でエラーが出てしまいます。 chatGPTに投げたところ、「train.py の Trainer クラスの run メソッド内で、test_df が空であるか、2次元データフレームでない場合に発生します。具体的には、LightGBM の predict メソッドに渡されるデータが空であることが原因です。」と返ってきます。 これは作った特徴量に問題があるということでしょうか? また、精度評価の関数はエラーなく動くのですがどうしてでしょうか?このあたりの使い方が理解できていません。 evaluator = Evaluator() summary_df = evaluator.summarize_box_exp(exp_name="model") summary_df ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー Trainエラー内容↓ trainer = Trainer() evaluation_df = trainer.run( valid_start_date="2022-10-01", test_start_date="2023-01-01" ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー ) { "name": "ValueError", "message": "Input data must be 2 dimensional and non empty.", "stack": "--------------------------------------------------------------------------- ValueError Traceback (most recent call last) Cell In[43], line 2 1 trainer = Trainer() ----> 2 evaluation_df = trainer.run( 3 valid_start_date=\"2022-10-01\", 4 test_start_date=\"2023-01-01\" 5 ) File c:\\Users\\81904\\python\\keibaAI-v3-yt-main\\feature\\src\\train.py:125, in Trainer.run(self, valid_start_date, test_start_date, importance_filename, model_filename, evaluation_filename) 118 \"\"\" 119 学習処理を実行する。 120 test_start_dateをYYYY-MM-DD形式で指定すると、 121 その日付以降のデータをテストデータに、 122 それより前のデータを学習データに分割する 123 \"\"\" 124 self.create_dataset(valid_start_date, test_start_date) --> 125 evaluation_df = self.train( 126 self.train_df, 127 self.valid_df, 128 self.test_df, 129 importance_filename, 130 model_filename, 131 ) 132 evaluation_df.to_csv( 133 self.output_dir / evaluation_filename, sep=\"\\t\", index=False 134 ) 135 return evaluation_df File c:\\Users\\81904\\python\\keibaAI-v3-yt-main\\feature\\src\\train.py:102, in Trainer.train(self, train_df, valid_df, test_df, importance_filename, model_filename) 90 # テストデータに対してスコアリング 91 evaluation_df = test_df[ 92 [ 93 \"race_id\", (...) 100 ] 101 ].copy() --> 102 evaluation_df[\"pred\"] = model.predict( 103 test_df[self.feature_cols], num_iteration=model.best_iteration 104 ) 105 logloss = log_loss(evaluation_df[\"target\"], evaluation_df[\"pred\"]) 106 print(\"-\" * 20 + \" result \" + \"-\" * 20) File c:\\Users\\81904\\Downloads\\anaconda\\Lib\\site-packages\\lightgbm\\basic.py:4748, in Booster.predict(self, data, start_iteration, num_iteration, raw_score, pred_leaf, pred_contrib, data_has_header, validate_features, **kwargs) 4746 else: 4747 num_iteration = -1 -> 4748 return predictor.predict( 4749 data=data, 4750 start_iteration=start_iteration, 4751 num_iteration=num_iteration, 4752 raw_score=raw_score, 4753 pred_leaf=pred_leaf, 4754 pred_contrib=pred_contrib, 4755 data_has_header=data_has_header, 4756 validate_features=validate_features, 4757 ) File c:\\Users\\81904\\Downloads\\anaconda\\Lib\\site-packages\\lightgbm\\basic.py:1139, in _InnerPredictor.predict(self, data, start_iteration, num_iteration, raw_score, pred_leaf, pred_contrib, data_has_header, validate_features) 1130 _safe_call( 1131 _LIB.LGBM_BoosterValidateFeatureNames( 1132 self._handle, (...) 1135 ) 1136 ) 1138 if isinstance(data, pd_DataFrame): -> 1139 data = _data_from_pandas( 1140 data=data, 1141 feature_name=\"auto\", 1142 categorical_feature=\"auto\", 1143 pandas_categorical=self.pandas_categorical, 1144 )[0] 1146 predict_type = _C_API_PREDICT_NORMAL 1147 if raw_score: File c:\\Users\\81904\\Downloads\\anaconda\\Lib\\site-packages\\lightgbm\\basic.py:814, in _data_from_pandas(data, feature_name, categorical_feature, pandas_categorical) 807 def _data_from_pandas( 808 data: pd_DataFrame, 809 feature_name: _LGBM_FeatureNameConfiguration, 810 categorical_feature: _LGBM_CategoricalFeatureConfiguration, 811 pandas_categorical: Optional[List[List]], 812 ) -> Tuple[np.ndarray, List[str], Union[List[str], List[int]], List[List]]: 813 if len(data.shape) != 2 or data.shape[0] < 1: --> 814 raise ValueError(\"Input data must be 2 dimensional and non empty.\") 816 # take shallow copy in case we modify categorical columns 817 # whole column modifications don't change the original df 818 data = data.copy(deep=False) ValueError: Input data must be 2 dimensional and non empty." }
@競馬予想で始めるデータ分析
Ай бұрын
そうですね、gptも出力しているように、インプットしているデータ形式がおかしくなっている(空、またはなぜか1次元になっている)ことが原因なので、入れているデータが想定通りのものか確認してみてください! 新しい特徴量を作ったとのことなので、mergeで紐付ける時に消えて0行になっているのではないかなと予想しています(分からないですが) > また、精度評価の関数はエラーなく動くのですがどうしてでしょうか? →これは、元のコードで作成成功していたevaluation.csvを読み込んでいるためだと思います
@モッキー
Ай бұрын
夜分にすみません。いつもありがとうございます! #9あたりであったレースの予想をする際に、feature_engineeringの中のfetch_resultsとfetch_shutubaのところで予想レースをfeatures = pfc.create_features( race_id="202407020806", # 予測するレースidを指定 skip_agg_horse=True # 事前に集計した場合はスキップできる )でやってもwakubanがとれなくなって予想できません。以前はできていたのになぜか教えていただけないでしょうか?あと、対処法もお願いします。
@競馬予想で始めるデータ分析
Ай бұрын
手元でも同じレースidで試してみましたが、無事取得できたのでパッと原因分からないのですが、 > wakubanがとれなくなって → どのような表示・エラーになりましたか?
@モッキー
Ай бұрын
@@競馬予想で始めるデータ分析 Processing race_id: 202407020806 Error: 'race_id' column is missing in results_df DataFrame. Empty DataFrame Columns: [] Index: [] いじくりすぎてわけわかんなんくなりましたf(^^;)
@競馬予想で始めるデータ分析
Ай бұрын
なるほど、色々変更されていそうですね...! 一度記事中のコードに戻して、一つずつデータが出来ているか確かめながら変えた方が良いかもしれないですね
@モッキー
Ай бұрын
@@競馬予想で始めるデータ分析 奇跡的に何とか修正できました。アドバイスありがとうございました!
@アアアナ
Ай бұрын
いつも勉強になる動画ありがとうございます。このシリーズで作った特徴量でlightgbm以外のライブラリを使った学習や予測を行うことってできますか?(例えばKerasなど)
@競馬予想で始めるデータ分析
Ай бұрын
欠損値の処理などは必要ですが、使えると思います!
@kers574
Ай бұрын
MacでPythonをインストールする際、 Anaconda*JupyterLab AnacondaxVSCode PyenvxPoetryxVSCode のどれで作業したら良いか教えてください! note買った場合でもGitHubの招待受け入れてもらえますか?
@競馬予想で始めるデータ分析
Ай бұрын
PyenvxPoetryxVSCodeが良いと思います! リメイク版はPyenvでPython3.11.4を入れてVSCodeで開発してます。(Poetryは使っていないですが) > note買った場合でもGitHubの招待受け入れてもらえますか? noteで扱っているバージョン(v3)のコードと、GitHubで扱っているバージョン(v1, v2)のコードは別物になりますので、GitHubの招待には別途Zennの書籍購入が必要です!(が、今から購入するなら、色々アップデートされているnoteの方がおすすめです)
@競馬予想で始めるデータ分析
Ай бұрын
📘動画中のソースコードや補足解説はこちら note.com/dijzpeb/n/n67ef63cf345f 📘目次 0:00 ダイジェスト 1:08 今回やること 5:01 LightGBMの主要なハイパーパラメータと、その意味 9:53 プロはどの程度の値に設定しているか? 20:04 過学習対策に必須な「Early Stopping」とは? 25:08 ハイパーパラメータを自動調整する「optuna」とは? 📘関連動画 kzbin.info/www/bejne/iaqVanSoidR3p5Y kzbin.info/www/bejne/eHS7m5SLqd-jn7M
@kosukefukuda-m4w
Ай бұрын
LightGBMが競馬予想AIに最も適しているのでしょうか?どのような理由でLightGBMを選ばれましたか? また、いろいろなタイプの機械学習で試す予定はありますか?
@競馬予想で始めるデータ分析
Ай бұрын
厳密にどのモデルが一番精度が出るかは、データセットや特徴量の入れ方によって変わるので、試してみないと分からないというのが前提ですが、競馬予想AIには(もっと言うとテーブルデータに対しては)基本的にLightGBMを選んでおくのが良いと思います。近年のkaggleを見てもほぼLightGBM(またはXGboostなどとのアンサンブル)かディープラーニングの2択で、精度の面でも優れているのと、何より欠損値やスケーリングの処理が不要な点が大きいです。 将来的にディープラーニングなどを試してみても良いですが、現時点のような開発段階では、なるべく高速に実験サイクルを回したいので、しばらくはLightGBMで進めると思います!
@kosukefukuda-m4w
Ай бұрын
@@競馬予想で始めるデータ分析 いつもご丁寧にありがとうございます。よく理解できました。 個人的に、競馬予想で最も重要なのは的中率ではなく回収率、つまりはオッズ×馬券に絡む確率の期待値だと考えています。 プログラミングを始めたばかりでデータサイエンスの知識も乏しいですが、このチャンネルに伴走して学びながら、いつかはディープラーニングを使い期待値重視の予想AIを作ろうと画策しています。 また、完璧に競馬を予想することは不可能であるため、馬券の最適購入アルゴリズムの方が需要がありそうだと思っています。 掛け金の分散等はレース直前に頭の中で計算するのは難しいので、このアルゴリズムは考えたいところです。 自分の体感ですが、競馬で勝つ人の特徴は賭け方が上手いということです。 競馬AI自体の精度向上もこの最適な賭け方アルゴリズムが大きく寄与するのではないかなと考えています。 引き続き楽しみにしています。
@競馬予想で始めるデータ分析
Ай бұрын
おっしゃる通りで、目的は回収率なので、最終的には馬券購入の最適化が重要だと思っています! では、なぜ今的中精度の向上を目指しているかというと、完璧な着順予想をするためではなく、 > オッズ×馬券に絡む確率の期待値 この「期待値」を算出するときに、「確率」を正しく出力できていないと、期待値の精度も不正確になってしまうと考えているからです。 回収率の数値を今すぐに上げようと思うと、先に馬券購入最適化した方が良いのでしょうが、今チューニングしている予測精度は馬券購入最適化のための「土台」のようなものだと思っていて、ここがしっかりしていないと、最適購入アルゴリズムも定まらないと考えています。 (参考までに、この辺の思想は#11の記事にも記載:note.com/dijzpeb/n/n12fd59d0ef17) なので、この土台を作り上げた後、馬券購入最適化のロジックを組んでいこう、という戦略です。 その時の最適なhowがディープラーニングになるかどうかは分からないですが、将来的に馬券購入最適化は考えていく予定なので、引き続き楽しみにしていただければと思います!
@kosukefukuda-m4w
Ай бұрын
自分用 13:20 予測結果を評価 15:25 dfの抜出 16:49 予測結果の並び替え。評価の高い順 的中率、回収率の算出 20:53 1番人気以外の馬の回収率 23:00〜lightgbmの解説
@kosukefukuda-m4w
Ай бұрын
コメントアウト Ctrl f (- .*〇〇) # $1 Ctrl / 22:46特徴量をyamlに追加
@kosukefukuda-m4w
Ай бұрын
13:32の場面、「# 既存データにないhorse_idのデータ」とキャプションが入りますが、「新規データに無いhorse_id」が正しいのではないでしょうか? 細かいところですが、こんがらがってしまっています。
@競馬予想で始めるデータ分析
Ай бұрын
たしかにそうでした...!失礼しましたmm
@chop66111
Ай бұрын
いつもありがとうございます、 特徴量について色々試してみようと思い、ドメイン寄りのものとして上がりと4角の位置を入れて、統計量も入れたのですが、loglossはむしろ悪くなってしまいました・・・(上がりは絶対効くと思ってたのですが…) 次に自作している情報収集ツールでもやっていることを入れようと思い、 特徴量の各行(あるレースに出走する各馬)について、馬ごとにレース日よりも過去レースの成績を集計して以下の特徴量を追加してみたいと考えています ・同距離最速時計 ・該当レースと同コースの複勝率(%) ・同距離複勝率(%) ・該当レースと同じ回りの複勝率(%) commonのhorse_results.csvにそういった各列を追加できないかと細々と試していますが、いかんせん不慣れで難しく。 気が向いた際に投稿者様の方での実装をご検討いただけますと幸いです〜🙏
@競馬予想で始めるデータ分析
Ай бұрын
特徴量追加良いですね! > ドメイン寄りのものとして上がりと4角の位置を入れて、統計量も入れたのですが、loglossはむしろ悪くなってしまいました・・・(上がりは絶対効くと思ってたのですが…) → trainのloglossはどうなりましたか?もしかしたら過学習していて、ハイパーパラメータを調整すると変わる可能性もあるので試してみてください(今週出す動画で、ハイパーパラメータについて詳しく扱う予定です) 挙げていただいている特徴量、是非試してみたいので、それにあたっていくつか意見を聞きたいのですが、 ・同距離最速時計は、馬の過去成績テーブルの「タイム」列の最小値を該当レースと同じ距離のレースに絞って出すようなイメージですか?それとも、もう少し複雑な概念でしょうか db.netkeiba.com/horse/2020103575/ ・「該当レースと同コースの複勝率(%)」について、「同コース」の条件はどのようなものが良いと思いますか?(芝/ダート, 会場, 距離)の3つ全て一致するものが良いですかね
@chop66111
Ай бұрын
ありがとうございます! 【loglogssについて】 以下の通り、上がりだけ追加したパターンが最も悪くなっていてこれが意外だったという感じでした 上がりと4角位置どちらも追加した場合が1番マシでしたが、元より良くはなっていませんでした ハイパーパラメータについての動画楽しみにしてます v3_0_2時点のlogloss:[100] training's binary_logloss: 0.188855 valid_1's binary_logloss: 0.206207 上がり追加logloss:[100] training's binary_logloss: 0.187878 valid_1's binary_logloss: 0.207053 4角位置追加logloss:[100] training's binary_logloss: 0.18819 valid_1's binary_logloss: 0.206265 どちらも追加logloss:[100] training's binary_logloss: 0.187869 valid_1's binary_logloss: 0.206247 【同距離最速時計について】 >・同距離最速時計は、馬の過去成績テーブルの「タイム」列の最小値を該当レースと同じ距離のレースに絞って出すようなイメージですか? 同距離最速時計はこちらの出し方でやっています!(芝/ダートの一致も見てます) また補足として、競馬には根幹距離・非根幹距離 という距離の分け方(の考え方)があり、非根幹距離のレース数は根幹距離と比べて恐らく少ないはずです そのため対象のレースが非根幹距離の場合に、最速時計を取ろうとしても、経験が無い馬が多く、NaNとなるケースが結構あるかもしれません goldhead.hatenablog.com/entry/2023/06/24/185503 正解は分かりませんが自分で作ってみてる物だと、『根幹距離を経験する馬は多いはずなので、根幹距離の場合だけ最速時計を探す』という風にしています (このあたりはLightGBMの特性上、一旦そういった条件は取っ払って特徴量に入れてみるのがいいのですかね) 【同コースの複勝率】 こちらについては芝/ダート・会場 の2つで絞るのが良いかと思っています たまに距離問わず特定の会場で成績の良い馬が居るため(人気もしやすいかと思いますが)というのと、芝/ダート は別物と考えてますのでここは分けたいかなと思いました 距離を外す理由は上記の通り特定の会場が得意そうかを見たいためとなります
@競馬予想で始めるデータ分析
Ай бұрын
【loglogssについて】 見るとtrainのloglossと逆の傾向になっていて、過学習していそうなので、もしかしたらハイパーパラメータを調整すると改善するかもです。 【同距離最速時計について】 なるほど、根幹距離・非根幹距離の分け方、とても勉強になります! 欠損率とかは確認しつつ、 > 『根幹距離を経験する馬は多いはずなので、根幹距離の場合だけ最速時計を探す』 これが確かに良さそうですね 【同コースの複勝率】 こちらも、意図理解しました 実装して試してみようと思います!
@えるしーけー
Ай бұрын
v3のソースコードはgithub上で公開されていますか? v2のgithubリポジトリには参加済みで、v3の最新がありましたらgithub招待お願いしたいです
@競馬予想で始めるデータ分析
Ай бұрын
v3のソースコードはgithubでは公開しておらず、noteからダウンロードする形になります! note.com/dijzpeb/n/n12e6f02db76a v2のgithubリポジトリとは別の扱いになりますので、ご了承ください。
@ゆず-v1c5p
Ай бұрын
お疲れ様です。いつも勉強になる動画ありがとうございます。 質問失礼いたします。 数日前から、race_id_list = scraping.scrape_race_id_list(kaisai_date_list)を実行した際に、 [WinError 193] %1 は有効な Win32 アプリケーションではありません。というエラーが出るようになってしまいました。 ---> 61 with webdriver.Chrome(service=Service(driver_path), options=options) as driver: にハイライトが当たっていたので、 動画内のchromeとwebdriverのバージョン不一致かな?と思い、以下のように合わせたのですが、解消せずに困っています。 思い当たる原因ありますでしょうか? =================== chromedriver 127.0.6533.99 chrome 127.0.6533.100 selenium 4.21.0 webdriver-manager 4.0.1 ===================
@競馬予想で始めるデータ分析
Ай бұрын
サポート遅くなりましたmm webdriver-managerが、THIRD_PARTY_NOTICES.chromedriverを読み込んでしまっていることが原因で、4.0.2で解消されたので、アップデートすることで解決できます pip install webdriver_manager==4.0.2 また、すでに4.0.1でchromedriverがインストールされている場合は、driver_pathを参考に一度削除してから再度4.0.2を利用してみてください。
@kosukefukuda-m4w
Ай бұрын
3:26レーステーブルの「上り」と「通過」の情報が取得されないのはなぜでしょうか。 この情報から直線での決め手を評価したいのですが、[0]以外のテーブルにも見当たらず困っています。
@競馬予想で始めるデータ分析
Ай бұрын
<diary_snap_cut>というタグが邪魔をしていて取得できないんです。 次の#4の記事で「上り」と「通過」含めて取得するように手を加えているので、参考にしてみてください! note.com/dijzpeb/n/n875cf6b70b2e
@kosukefukuda-m4w
Ай бұрын
@@競馬予想で始めるデータ分析 ありがとうございます!
@競馬予想で始めるデータ分析
Ай бұрын
📘動画中のソースコードや補足解説はこちら note.com/dijzpeb/n/n12e6f02db76a 📘目次 0:00 ダイジェスト 0:35 今回やること 2:18 特徴量追加の4つのパターンとは? 6:54 集計特徴量追加の流れ 22:05 集計特徴量追加の実験方法 📘関連動画 kzbin.info/www/bejne/iaqVanSoidR3p5Y
@hsasaki5601
2 ай бұрын
いつもありがとうございます。素晴らしい動画です。 pd.concatメソッドは、第一引数にt.List[pd.DataFrame]型だけでなく、t.Dict[str, pd.DataFrame]型も指定することができ、自動でマルチインデックスなDataFrameなります。 さらに加えると、importする順番は標準搭載されているライブライから、pipインストールしたライブラリ、自作したライブラリの順に記載するとさらによいです。
@競馬予想で始めるデータ分析
2 ай бұрын
ありがとうございます!勉強になります!
@マロンです-c3f
2 ай бұрын
いつも参考にさせてもらってます。 scraping.scrape_race_id_list()を実行したところ OSErrorとなってしまいました 対処方法とかあるのでしょうか?
@競馬予想で始めるデータ分析
2 ай бұрын
他のコメントにもあったのでが、最近のchromeのバージョンアップデートで発生しているエラーのようですね qiita.com/doranko/items/52a2c0003ee7eaafb6de chromeのバージョンを下げるか、記事中に書かれている方法で回避する形になるかなと思います
@tmfukushima2010
2 ай бұрын
完全版を7/27に購入して、領収書をメールで送付しています。Githubへのリンクの通知をよろしくお願いいたします。