paint-brush
モンテカルロを使用して、毎日のファンタジー ベースボール ゲームで勝てない理由を説明する@courtneyperigo
1,677 測定値
1,677 測定値

モンテカルロを使用して、毎日のファンタジー ベースボール ゲームで勝てない理由を説明する

Courtney Perigo 2022/06/15
Read on Terminal Reader
Read this story w/o Javascript

長すぎる; 読むには

この夏、私を悩ませてきた問題についてオペレーションズ リサーチのスキルをテストしたいと思いました。ファンタジー スポーツでは、野手 8 人と投手 2 人の名簿を選びます。彼らの給料はリーグのサラリーキャップを超えることはできません。シミュレーションでは、2018 年からシミュレートしている試合の前日までのメジャー リーグ野球選手の実際の結果を使用します。新しい制約伝播によって変更された使い尽くされた検索を実行して、最高のパフォーマンスを発揮するラインナップを見つけることができます。

Company Mentioned

Mention Thumbnail
featured image - モンテカルロを使用して、毎日のファンタジー ベースボール ゲームで勝てない理由を説明する
Courtney Perigo  HackerNoon profile picture

いいえ、あなたが試してみたいデイリー ファンタジー スポーツ ゲームにはおそらく勝てないでしょう。理由は次のとおりです。


この夏、私を悩ませてきた問題についてオペレーションズ リサーチのスキルをテストしたいと思いました。なぜ私はオンラインの毎日のファンタジーベースボールが下手なのですか?


これを読んでいるなら、おそらく私が話していることを知っているでしょう。あなたはちょっとした調査をしたいと思っていて、チームを構築する方法に関するヒントを探してこのデータ サイエンスのブログ投稿にたどり着いたタイプだと思います。


ネタバレ注意: 悪い知らせがあります。


このブログでは、オンライン ファンタジー スポーツが難しい理由を説明します。これらのオンライン ゲーム プロバイダーによって作成された経済は効率的であり、システムを操作したい場合は多くの時間を費やす必要があることがわかります。

オンライン幻想野球とは?

私が話していることに慣れていない場合は、この段落が役に立ちます。無名になるオンラインギャンブルのウェブサイトによると、オンラインファンタジースポーツ賭博は480億ドル規模の産業です.ファンタジー スポーツでは、その日にプレーしているプレーヤーを選び、そのプレーヤーが良い成績を収めてお金を稼げるかどうかを確認します。野球バージョンでは、野手 8 人と投手 2 人の名簿を選択します。彼らの給料はリーグのサラリーキャップを超えることはできません。その日のパフォーマンスによって、獲得するポイントが決まります。その日の最高の選手を選ぶだけで、何もする必要はありません。


シンプルですね。


作者による画像:ファンタジーベースボール(クラシックルール)

なぜ私はオンライン ファンタジー ベースボールが苦手なのですか?

著者による画像。私の幻想的な野球のロゴ.


私のファンタジー チーム、シカゴ レッド ライン ハスラーズに参加してください。はい、ごっこ遊びチームのロゴを作成しました。それはあなたにとって何ですか?


私たちはそれほど良くありません。私は 1 か月ほどプレイしていますが、私のチームはお金を失いました。多くはありません、私は一線を画していません。しかし、本業をやめることはできません。その理由を知りたいです。

モンテカルロ シミュレーションは、ファンタジー スポーツのリスクを評価するのに役立ちます

なぜ私がこのゲームが苦手なのかを理解するために、私は自分の意思決定分析ツールキットに手を伸ばし、古くから実証済みの真のポートフォリオ分析ツールであるモンテカルロ シミュレーションを払いのけました。このシミュレーションは、人事決定のリスクを理解するのに役立ちます。具体的には、リーグのサラリー キャップを下回るという制約を考慮して、どの 10 人の選手を選ぶべきかを理解するのに役立ちます。


シミュレーションでは、2018 年からシミュレートしている試合の前日までのメジャー リーグ野球選手の実際の結果を使用します。私は、MLB.com の公開 API から、アクティブなすべてのメジャー リーガーの毎日の統計を取得することで、これを実現しています。 (注: データ エンジニアリングは、このブログの範囲外です。)


統計が収集されたら、シミュレートしたいファンタジー ゲームに参加する資格のあるプレイヤーを収集する必要があります。私は、デイリー ファンタジー スポーツに特化したオンライン スポーツ ギャンブルの運営者のパブリック API とやり取りすることで、それを実現しています。 (注: データ エンジニアリングは、このブログの範囲外です。)


データが収集され、適格なプレーヤーが特定されると、シミュレーションは、新しい制約の伝播によって変更された徹底的な検索を実行して、最高のパフォーマンスを発揮するラインナップを見つけることができます。または、ユーザーがラインナップを定義し、そのパフォーマンスを評価できます。

目的関数

シミュレーションの目的は、投手 2 名と野手 8 名のラインナップによって行われる野球の試合の潜在的な結果をシミュレートすることです。これらの結果は、オンライン プロバイダーの毎日のファンタジー野球コンテストの古典的なルールを使用して採点されます。

著者による画像: オンライン ファンタジー ベースボール プロバイダーが使用する典型的なクラシック スコアリング テンプレート。

モンテカルロ シミュレーション

利用可能なデータがあれば、実世界のデータから予想される結果を実験し、モデル化することができます。私たちの目標は、8 ポジションの選手 (野球の 8 つの守備ポジションすべてを表す) と 2 人のピッチャーのファンタジー スコアリングを特定することです。私たちのモデルは、野手と投手を個別に扱う必要があります。

バッティング シミュレーション: プレートの外観が重要

ポジション プレーヤーの場合、得点はバッティングの結果に大きく偏ります。ポジション プレーヤーについては、打席のシミュレーションと、その打席の結果に対応する潜在的な結果に焦点を当てます。


私たちはオフェンスの結果をシミュレートすることでこれを達成し、プレーヤーがファンタジー ゲームに影響を与えることができる唯一のチャンスであるため、プレートの外観のみを気にします。シミュレーションのフローチャートは、プレートの外観とその潜在的な結果を特定するためにモデルがどのように進むかを示しています。


著者による画像: バッティング シミュレーションのフローチャート

プレートの外観

プレーヤーは各ゲームでさまざまなプレートの外観を持つことができ、それは主にラインナップに表示される順序に関連付けられています.ラインナップの後ろに位置するプレーヤーは、ラインナップのトップ (先頭) にいるプレーヤーよりも打席数が少ない傾向があります。私たちのモデルは、プレーヤーが歴史的に持っていた打席数にアクセスできますが、そのゲームに登場したラインナップの順序にはアクセスできません。これが、シミュレーションの精度に対する最初の制限です。次の試合の打順に基づく実際の予想ではなく、過去の結果に基づいて打席をモデル化します。


シミュレーションを実行するために、乱数発生器を使用して各ポジション プレーヤーの履歴打席の順序付けられたリストから打席を選択することにより、過去のゲームの打席を経験的にサンプリングします。


著者による画像: プレートの外観を返す Python コード


シミュレートされたゲームごとに、プレートの外観のこのランダムな選択が実行されます。この方法論は、各プレーヤーの期待される結果を一致させるために非常に正確です。


著者による画像: プレートの外観の実際の性能とシミュレートされた性能。

プレートの外観の結果

プレートの外観をシミュレートしたら、可能な結果を決定するためのモデルを特定し、ネストされた確率を活用して、プレーヤーが達成することが期待される結果を選択する必要があります。ネストされた、または連鎖された確率の最初のストップは、プレートの外観を攻撃的な結果に変えるプレーヤーの能力からサンプリングすることです。この比率をシミュレーションのプレートの外観に適用して、プレーヤーがそのゲームで達成した結果の数を特定できます。


著者による画像: アウトカム比率を返す Python コード


結果の数が決定されると、プレイヤーが達成した過去の結果を使用して、そのプレイヤーができることをシミュレートできます。たとえば、ホームランをたくさん打ったことで知られるプレーヤーをシミュレートしている場合、彼の歴史的なパフォーマンスには多くのホームランが見られます。


著者による画像: 独自の結果分布を示す 2 人の異なる MLB ポジション プレーヤーの結果。


シミュレーションは、プレイヤーが過去に達成した結果の分布から経験的にサンプリングします。次に、オンライン ファンタジー プロバイダーのスコア カードに従って結果を採点し、さらに処理して、その結果が発生したときのゲームの状態に基づいて追加の結果をシミュレートすることができます。


著者による画像: プレイヤーの結果を返す Python コード。

ベース ステータスとプレート外観の最終的な結果のシミュレーション

結果が発生したときのゲームの状態は、シミュレーションがモデル化しなければならない 3 つの最終結果にも影響します。これら 3 つの結果は、プレーヤーが結果を達成する前、最中、後に発生したイベントによって異なります。フローチャートの最後のレイヤーは、特定の結果が発生した場合にのみ可能になるラン、盗塁、打点を示しています。


さらに、これら 3 つのイベントの量も結果の影響を受けます。たとえば、プレーヤーがホームランを打った場合、少なくとも 1 打点と 1 ランが与えられます。その結果、盗塁を達成するチャンスもありません。入れ子になった確率の追加レイヤーでこれらすべてのルールをモデル化し、過去のプレーヤーのパフォーマンスに基づいて経験的にサンプリングして、プレーヤーが実行していたゲームの状態をシミュレートします。これらの結果の 1 つの例を以下に示します。モデリングの実行です。


著者による画像: プレーヤーごとに得点されたランを返す Python コード。

バッティング結果のシミュレーション

すべての関数が定義されたので、十分なサンプル パフォーマンスを利用して、任意のプレーヤーに対して無制限のゲームをシミュレートできるようになりました。結果は非常にうまく機能します。これは、LA ドジャースのトレア ターナーをシミュレートした例です。


著者による画像: Trea Turner Simulation (2 ゲーム)


著者による画像: Trea Turner Fantasy Points (シミュレートされた) 対の Boxplot。実戦成績(50試合)

ピッチャー シミュレーション: イニング ピッチド マター

打者がシミュレーションで考慮されているため、モデルは投手の結果もシミュレートできなければなりません。ピッチャーのファンタジー スコアリングは、打席の結果と、彼らが直面する打者の結果のみを考慮します。


著者による画像: ピッチング シミュレーションのフローチャート。


投手の場合、モデルは投球されたイニングをシミュレートすることから始まります。私自身の新しい調査によると、より多くのイニングを投球する投手はより良い成績を収める傾向があることが示唆されているため、これは重要です (ゲームが進むにつれて、ラン数、ヒット数が減り、勝率が向上するなど)。


著者による画像: 投球回ごとの投手の勝率 (四捨五入)


この観察は直観的であり、マネージャーは別の投手を優先して、ゲームから良い外出をしている強い投手を引っ張る可能性が低いためです.

投球イニング数

シミュレーションを実行するために、乱数発生器を使用して過去の試合から投球されたイニングを経験的にサンプリングし、各投手が投球した過去のイニングの順序付けられたリストから投球されたイニングを選択します。これを実現するコードは、バッターの打席機能のようなものです。シミュレートされたゲームごとに、このランダムな選択が実行されます。この方法論は、各ピッチャーの投球予想イニング数を一致させるのに非常に正確です。


著者による画像: MLB ピッチャー シミュレーションと実際の投球回数。

ピッチングの結果

投手の成績は投球回数で評価される。先ほども言いましたが、ピッチャーがどれだけゲームに深く入っているかによって、選手のパフォーマンスが異なるためです。


私たちが気にかけている結果は 3 つあります。それは、勝利数、失点数、安打数、四球数、三振数です。投球されたイニングに対応する投手データのサブセットを経験的にサンプリングすることで、これらの結果をシミュレートします。このプロセスにより、投球されたイニングの関数として投手のパフォーマンスを尊重することが保証されます。


著者による画像: 投球回数の関数として自責点を返す Python コード。


最終結果は、各実行後のシミュレーション ステータスのチェックです。モデルは、シミュレートされた投手が 9 イニングを完投するたびに完投を記録します。シミュレートされた投手が 9 イニングを完投し、自責点がない場合はいつでも、ピッチャーに完封を認めます。最後に、モデルは、9 イニングすべてを完了し、安打を達成しなかったピッチャーがシミュレーションによって生成された場合、シミュレートされたピッチャーをノーヒットノーランと見なします。

投手ゲームのシミュレーション

すべての投球関数が定義されたので、十分なサンプル データを使用して、任意の投手の無制限のゲームをシミュレートできるようになりました。シミュレートされたデータは、モデル化した投手の実際の MLB パフォーマンスと非常によく似ています。


著者による画像: コービン・バーンズのシミュレートされた投球パフォーマンス


著者による画像: Corbin Burnes ファンタジー ポイントの実際とシミュレーション

計算実験と結果:

このプロジェクトの目標は、デイリー ファンタジー スポーツ ゲームのラインナップを選択する際のリスクを評価することでした。これを実現するために、ファンタジー ベースボール プロバイダーの古典的なルールで示されている最大 50,000 ドルのサラリー キャップを使用して、有効なラインナップをランダムに埋める関数を作成しました。これを 500 回実行して、シミュレートする 500 個のランダムで有効なラインナップを作成しました。有効なラインナップの各プレーヤーは、それぞれ 50 試合のパフォーマンスをシミュレートする独自のシミュレーションを受けました。結果は驚くべきものではありませんでした。


野球の結果には多くのランダム性があるようです。

これは、変動性に対するポイントの比率によって選択されたトップ 10 のランダムなラインナップのシミュレートされたパフォーマンスの要約です。たとえば、金融のシャープ レシオです。これらのラインナップは、リスクが最も低く、最も効果的な選択肢です。


著者による画像: ランダムで有効なラインナップによって取得されたトップ シャープ レシオ (視聴された上位 10 公演)


これは同じビジュアルですが、最高得点の有効なラインナップを選択しています。


著者による画像: トップ シミュレーション ファンタジー ランダム、有効なラインナップ (トップ 10 のパフォーマンスが表示されました)


これらの画像は、強力なパフォーマンスを持つ有効なラインナップを示していますが、これらのラインナップはすべて、互いに非常に近い期待値を持っています。この広範な検索では、他のすべてのラインナップを大幅に上回るラインナップを見つけることができませんでした。私たちのシミュレーションは、プレーヤーの詳細な分析と評価を行わないファンタジー ベースボール ゲームは、単なる偶然のゲームであることを示すことに成功しました。

考察と結論

結論として、シミュレーションは意思決定に伴うリスクを理解するのに非常に役立つツールです。製品設計、パイロット トレーニング、キューイング研究、そして現在はファンタジー スポーツなど、幅広い用途に適用されています。


この特定のシミュレーションの結果は、短期間の野球が非常にランダムであることを示しています。どのプレイヤーも、その日の良い試合や悪い試合をする可能性があります。対戦が始まる可能性があり、ゲームの状況がプレーヤーの決定に影響を与える可能性があります。


非常に複雑なシステムをモデル化し、非常に現実的な結果を得る能力を達成しました。長期的には、シミュレーションによって、実際の選手と同様のパフォーマンスを発揮する選手が生成されると期待しています。


シミュレーションを改善できます。たとえば、パフォーマンスの結果に関するゲームの状態に関するデータはありません。過去の実績に基づいてシミュレーションを行っていますが、改良されたモデルではゲームの状態もシミュレートされます。これは、他のプレイヤーの決定とゲームの状態が結果を生成するプレイヤーの能力に影響を与えるため、重要な次のステップになります。さらに、このモデルは、ファンタジー スポーツの重要なトピックである対戦をシミュレートできません。打者は、相手のピッチャーやチームによってパフォーマンスが異なります。


最後に、マッチアップを考慮した新しい改善をインストールし、短期的なプレイヤーのパフォーマンスを評価する能力を徐々に改善したいと考えています.


ここにも掲載されています。