2022 FIFAワールドカップ、日本が決勝トーナメントに進出できる確率（2022年11月27日時点）

## はじめに
まず、この記事を書く前に、2022年11月27日にカタール、アフメド・ビン＝アリー・スタジアム, ライヤーンで行われた、日本対コスタリカ戦、日本がコスタリカに、0対1で負けたことにより、決勝トーナメントに進出できる確率がグッと下がってしまいました。
さて、2022年11月27日時点での、日本の決勝トーナメントに進出できる確率はどのくらいか計算してみることにしました。以前投稿した[2022 FIFAワールドカップ、日本が決勝トーナメントに進出できる確率（2022年11月23日時点）](https://qiita.com/eclipse-hunter-usa/items/31fbc7f544c8122a6b1a)はこちら。
まずは、2022 FIFAワールドカップ、グループEの2022年11月27日時点の勝ち点を下記に示します。

## 2022 FIFAワールドカップ、グループEの勝ち点表

|   |試合数|勝ち数|引き分け数|負け数|得点数|失点数|得失点差|勝ち点|
|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|
|スペイン|2|1|1|0|8|1|+7|4|
|日本|2|1|0|1|2|2|±0|3|
|コスタリカ|2|1|0|1|1|7|−6|3|
|ドイツ|2|0|1|1|2|3|−1|1|

## 2022年12月1日の計2試合をシミュレートするスクリプトを作成する
まだ行われていない試合計2試合をシミュレートして、どのチームが決勝トーナメントに進出できるか試してみます。

試合は

- 2対0でチームＡの勝利
- 1対0でチームＡの勝利
- 0対0で引き分け
- 1対1で引き分け
- 0対1でチームＢの勝利
- 0対2でチームＢの勝利

の6通りを用意します。
実際には3対0や2対2など列挙し出すとキリがありませんが、今回は上記の6通りを用意します。

## 免責事項
その前に、このスクリプトの実行は自己責任でお願いします。本スクリプトを実行することにより生じるいかなる問題に関しましても、筆者は一切責任を負いません。予めご了承ください。

## 2022年12月1日の計2試合をシミュレートするスクリプトをPythonで作成する
2試合全ての
- 2対0でチームＡの勝利
- 1対0でチームＡの勝利
- 0対0で引き分け
- 1対1で引き分け
- 0対1でチームＢの勝利
- 0対2でチームＢの勝利

パターンを試すスクリプトを下記に掲載します。Brute force的な片っ端から試しているスクリプトなのでツッコミどころ満載ですが、ご愛嬌ということで、目を瞑っていただきたく、よろしくお願いします。

```Python
# -*- coding: utf-8 -*-

import copy

# チーム名の登録
spain = 'スペイン'.center(5, '　')
japan = '日本'.center(5, '　')
costa_rica = 'コスタリカ'
germany = 'ドイツ'.center(5, '　')

# 2022年11月27日時点の勝ち点情報の登録
TEAMS = {spain: [8, 7, 4],
        japan: [2, 0, 3],
        costa_rica: [1, -6, 3],
        germany: [2, -1, 1]}

# チームＡが2x0で勝った時の関数
def two_zero(fw, teams, team1, team2):
    teams[team1][0] += 2
    teams[team1][1] += 2
    teams[team1][2] += 3
    teams[team2][1] -= 2
    print(f'{team1}x{team2}、{team1}: 勝利')
    fw.write(f'{team1}x{team2}、{team1}: 勝利\n')

# チームＡが1x0で勝った時の関数
def one_zero(fw, teams, team1, team2):
    teams[team1][0] += 1
    teams[team1][1] += 1
    teams[team1][2] += 3
    teams[team2][1] -= 1
    print(f'{team1}x{team2}、{team1}: 勝利')
    fw.write(f'{team1}x{team2}、{team1}: 勝利\n')

# 0x0で引き分けた時の関数
def zero_zero(fw, teams, team1, team2):
    teams[team1][2] += 1
    teams[team2][2] += 1
    print(f'{team1}x{team2}、引き分け')
    fw.write(f'{team1}x{team2}、引き分け\n')

# 1x0で引き分けた時の関数
def one_one(fw, teams, team1, team2):
    teams[team1][0] += 1
    teams[team1][2] += 1
    teams[team2][0] += 1
    teams[team2][2] += 1
    print(f'{team1}x{team2}、引き分け')
    fw.write(f'{team1}x{team2}、引き分け\n')

# チームＢが0x1で勝った時の関数
def zero_one(fw, teams, team1, team2):
    teams[team1][1] -= 1
    teams[team2][0] += 1
    teams[team2][1] += 1
    teams[team2][2] += 3
    print(f'{team1}x{team2}、{team2}: 勝利')
    fw.write(f'{team1}x{team2}、{team2}: 勝利\n')

# チームＢが0x2で勝った時の関数
def zero_two(fw, teams, team1, team2):
    teams[team1][1] -= 2
    teams[team2][0] += 2
    teams[team2][1] += 2
    teams[team2][2] += 3
    print(f'{team1}x{team2}、{team2}: 勝利')
    fw.write(f'{team1}x{team2}、{team2}: 勝利\n')

# 決勝トーナメント進出、グループリーグ敗退の集計用
RESULTS = {spain: [0, 0, 0],
            japan: [0, 0, 0],
            costa_rica: [0, 0, 0],
            germany: [0, 0, 0]}

# 2022年12月1日、全2試合の勝敗パターンを配列で登録
matches1 = [two_zero, one_zero, zero_zero, one_one, zero_one, zero_two]
matches2 = [two_zero, one_zero, zero_zero, one_one, zero_one, zero_two]

# 全2試合の勝敗パターンの総数
TOTAL = len(matches1) * len(matches2)

# 結果をテキストファイル'group-stage-2.txt'に出力する
with open('group-stage-2.txt', 'w') as fw:
    # 2022年12月1日第一試合
    for match1 in matches1:
        # 2022年12月1日第二試合
        for match2 in matches2:
            # 2022年11月27日時点の勝ち点情報をディープコピー
            teams = copy.deepcopy(TEAMS)
            # 2022年12月1日第一試合、日本 対 スペイン
            match1(fw, teams, japan, spain)
            # 2022年12月1日第二試合、コスタリカ 対 ドイツ
            match2(fw, teams, costa_rica, germany)

            # 2022年11月27日時点の勝ち点情報と全2試合の勝敗から、総得点でソートする
            sorted1 = sorted(teams.items(), key=lambda x:x[1][0], reverse=True)
            # ソートした結果を得失点差でソートする
            sorted2 = sorted(sorted1, key=lambda x: x[1][1], reverse=True)
            # ソートした結果を勝ち点でソートする
            sorted3 = sorted(sorted2, key=lambda x: x[1][2], reverse=True)

            for i, team in enumerate(sorted3):
                if i < 2:
                    # グループ2位以内は決勝トーナメント進出
                    RESULTS[team[0]][0] += 1
                    print(f'{team[0]}、勝ち点{str(team[1][2]).rjust(2)}: 決勝トーナメント進出')
                    fw.write(f'{team[0]}、勝ち点{str(team[1][2]).rjust(2)}: 決勝トーナメント進出\n')
                else:
                    # グループ3位以下はグループリーグ敗退
                    RESULTS[team[0]][2] += 1
                    print(f'{team[0]}、勝ち点{str(team[1][2]).rjust(2)}: グループリーグ敗退')
                    fw.write(f'{team[0]}、勝ち点{str(team[1][2]).rjust(2)}: グループリーグ敗退\n')
            print('')
            fw.write('\n')

    # 決勝トーナメント進出、グループリーグ敗退の集計結果を表示
    for k, v in RESULTS.items():
        print(f'{k}: 決勝トーナメント進出 {str(v[0]).rjust(3)}回({v[0]/TOTAL*100:6.2f}%)、'
                f'グループリーグ敗退 {str(v[2]).rjust(3)}回({v[2]/TOTAL*100:6.2f}%)')
        fw.write(f'{k}: 決勝トーナメント進出 {str(v[0]).rjust(3)}回({v[0]/TOTAL*100:6.2f}%)、'
                f'グループリーグ敗退 {str(v[2]).rjust(3)}回({v[2]/TOTAL*100:6.2f}%)\n')
```

## スクリプトの説明
copyはPythonの標準モジュールです。グループEの勝ち点情報の初期化に利用しています。

```Python
import copy
```

グループE、4チームを登録しています。後で見やすいように、最長文字列「コスタリカ」の5文字で空白で埋めてセンタリングしています。

```Python
# チーム名の登録
spain = 'スペイン'.center(5, '　')
japan = '日本'.center(5, '　')
costa_rica = 'コスタリカ'
germany = 'ドイツ'.center(5, '　')
```

2022年11月27日時点の勝ち点情報を登録しています。左から「総得点、得失点差、勝ち点」です。

```Python
# 2022年11月27日時点の勝ち点情報の登録
TEAMS = {spain: [8, 7, 4],
        japan: [2, 0, 3],
        costa_rica: [1, -6, 3],
        germany: [2, -1, 1]}
```

チームＡが、2対0で勝利した場合の関数です。チームＡの総得点を+2、得失点差を+2、勝ち点を+3、チームＢの得失点差を-2しています。

```Python
# チームＡが2対0で勝った時の関数
def two_zero(fw, teams, team1, team2):
    teams[team1][0] += 2
    teams[team1][1] += 2
    teams[team1][2] += 3
    teams[team2][1] -= 2
    print(f'{team1}x{team2}、{team1}: 勝利')
    fw.write(f'{team1}x{team2}、{team1}: 勝利\n')
```

チームＡが、1対0で勝利した場合の関数です。チームＡの総得点を+1、得失点差を+1、勝ち点を+3、チームＢの得失点差を-1しています。

```Python
# チームＡが1対0で勝った時の関数
def one_zero(fw, teams, team1, team2):
    teams[team1][0] += 1
    teams[team1][1] += 1
    teams[team1][2] += 3
    teams[team2][1] -= 1
    print(f'{team1}x{team2}、{team1}: 勝利')
    fw.write(f'{team1}x{team2}、{team1}: 勝利\n')
```

チームＡとチームＢが、0対0で引き分けた時の関数です。チームＡ、チームＢの勝ち点にそれぞれ+1しています。

```Python
# 0対0で引き分けた時の関数
def zero_zero(fw, teams, team1, team2):
    teams[team1][2] += 1
    teams[team2][2] += 1
    print(f'{team1}x{team2}、引き分け')
    fw.write(f'{team1}x{team2}、引き分け\n')
```

チームＡとチームＢが、1対1で引き分けた時の関数です。チームＡ、チームＢの総得点を+1、チームＡ、チームＢの勝ち点にそれぞれ+1しています。

```Python
# 1対1で引き分けた時の関数
def one_one(fw, teams, team1, team2):
    teams[team1][0] += 1
    teams[team1][2] += 1
    teams[team2][0] += 1
    teams[team2][2] += 1
    print(f'{team1}x{team2}、引き分け')
    fw.write(f'{team1}x{team2}、引き分け\n')
```

チームＢが、0対1で勝利した場合の関数です。チームＡの得失点差を-1、チームＢの総得点を+1、得失点差を+1、勝ち点を+3しています。

```Python
# チームＢが0対1で勝った時の関数
def zero_one(fw, teams, team1, team2):
    teams[team1][1] -= 1
    teams[team2][0] += 1
    teams[team2][1] += 1
    teams[team2][2] += 3
    print(f'{team1}x{team2}、{team2}: 勝利')
    fw.write(f'{team1}x{team2}、{team2}: 勝利\n')
```

チームＢが、0対2で勝利した場合の関数です。チームＡの得失点差を-2、チームＢの総得点を+2、得失点差を+2、勝ち点を+3しています。

```Python
# チームＢが0対2で勝った時の関数
def zero_two(fw, teams, team1, team2):
    teams[team1][1] -= 2
    teams[team2][0] += 2
    teams[team2][1] += 2
    teams[team2][2] += 3
    print(f'{team1}x{team2}、{team2}: 勝利')
    fw.write(f'{team1}x{team2}、{team2}: 勝利\n')
```

決勝トーナメント進出、グループリーグ敗退をそれぞれ集計するための辞書を作成しています。

```Python
# 決勝トーナメント進出、グループリーグ敗退の集計用
RESULTS = {spain: [0, 0, 0],
            japan: [0, 0, 0],
            costa_rica: [0, 0, 0],
            germany: [0, 0, 0]}
```

2022年12月1日、全2試合の勝敗パターンを配列で登録しています。

```Python
# 2022年12月1日、全2試合の勝敗パターンを配列で登録
matches1 = [two_zero, one_zero, zero_zero, one_one, zero_one, zero_two]
matches2 = [two_zero, one_zero, zero_zero, one_one, zero_one, zero_two]
```

全2試合の勝敗パターンの総数を求めています。

```Python
# 全4試合の勝敗パターンの総数
TOTAL = len(matches1) * len(matches2)
```

結果をテキストファイル'group-stage-2.txt'として出力しています。

```Python
# 結果をテキストファイル'group-stage-2.txt'に出力する
with open('group-stage-2.txt', 'w') as fw:
```

全2試合をfor文を使用して試しています。

```Python
# 2022年12月1日第一試合
for match1 in matches1:
    # 2022年12月1日第二試合
    for match2 in matches2:
```

2022年11月27日時点のグループEの勝ち点情報を基にディープコピーしています。

```Python
# 2022年11月27日時点の勝ち点情報をディープコピー
teams = copy.deepcopy(TEAMS)
```

2022年12月1日第一試合と第二試合の計2試合の「2対0でチームＡの勝利、1対0でチームＡの勝利、0対0で引き分け、1対1で引き分け、0対1でチームＢの勝利、0対2でチームＢの勝利」を試しています。

```Python
# 2022年12月1日第一試合、日本 対 スペイン
match1(fw, teams, japan, spain)
# 2022年12月1日第二試合、コスタリカ 対 ドイツ
match2(fw, teams, costa_rica, germany)
```

2022年11月27日時点の勝ち点情報と全2試合の勝敗から、まず総得点を降順でソートします。その後、得失点を降順でソートして、最後に勝ち点を降順でソートしています。そうすることで、最終的に、勝ち点でソートされた順位を取得できます。勝ち点で並んだ場合、得失点差。得失点差でも並んだ場合、総得点で順位が決まります。

```Python
# 2022年11月27日時点の勝ち点情報と全2試合の勝敗から、総得点でソートする
sorted1 = sorted(teams.items(), key=lambda x:x[1][0], reverse=True)
# ソートした結果を得失点差でソートする
sorted2 = sorted(sorted1, key=lambda x: x[1][1], reverse=True)
# ソートした結果を勝ち点でソートする
sorted3 = sorted(sorted2, key=lambda x: x[1][2], reverse=True)
```

ソートした結果を表示しています。グループ2位以内は、決勝トーナメント進出を+1。グループ3位以下はグループリーグ敗退を+1して、それぞれの結果を表示しています。

```Python
for i, team in enumerate(sorted3):
    if i < 2:
        # グループ2位以内は決勝トーナメント進出
        RESULTS[team[0]][0] += 1
        print(f'{team[0]}、勝ち点{str(team[1][2]).rjust(2)}: 決勝トーナメント進出')
        fw.write(f'{team[0]}、勝ち点{str(team[1][2]).rjust(2)}: 決勝トーナメント進出\n')
    else:
        # グループ3位以下はグループリーグ敗退
        RESULTS[team[0]][2] += 1
        print(f'{team[0]}、勝ち点{str(team[1][2]).rjust(2)}: グループリーグ敗退')
        fw.write(f'{team[0]}、勝ち点{str(team[1][2]).rjust(2)}: グループリーグ敗退\n')
print('')
fw.write('\n')
```

最後に、グループE 4チームの決勝トーナメント進出、グループリーグ敗退を集計した結果を表示しています。

```Python
# 決勝トーナメント進出、グループリーグ敗退の集計結果を表示
for k, v in RESULTS.items():
    print(f'{k}: 決勝トーナメント進出 {str(v[0]).rjust(3)}回({v[0]/TOTAL*100:6.2f}%)、'
            f'グループリーグ敗退 {str(v[2]).rjust(3)}回({v[2]/TOTAL*100:6.2f}%)')
    fw.write(f'{k}: 決勝トーナメント進出 {str(v[0]).rjust(3)}回({v[0]/TOTAL*100:6.2f}%)、'
            f'グループリーグ敗退 {str(v[2]).rjust(3)}回({v[2]/TOTAL*100:6.2f}%)\n')
```

## 動作確認環境
• MacOS 13.0.1
• Python 3.9.6

## スクリプトの実行結果
実行結果は、下記の通りになりました。グループE 残り2試合の
- 2対0でチームＡの勝利
- 1対0でチームＡの勝利
- 0対0で引き分け
- 1対1で引き分け
- 0対1でチームＢの勝利
- 0対2でチームＢの勝利

の総数は、6の2乗=36通りで、期待通りの結果が返ってきています。

```
 スペイン: 決勝トーナメント進出 32回( 88.89%)、グループリーグ敗退  4回( 11.11%)
  日本  : 決勝トーナメント進出 17回( 47.22%)、グループリーグ敗退 19回( 52.78%)
コスタリカ: 決勝トーナメント進出 16回( 44.44%)、グループリーグ敗退 20回( 55.56%)
  ドイツ : 決勝トーナメント進出  7回( 19.44%)、グループリーグ敗退 29回( 80.56%)
```

## グループE 残り2試合の考察
2022 FIFAワールドカップ、グループE 4チームを考察すると、以下のようなことが言えます。
2022年11月27日時点で、

- 11月27日のドイツ戦を引き分けたスペインが、決勝トーナメント進出確率、86.42%から88.89%と僅かに上昇した。
- 11月27日のコスタリカ戦に負けた日本が、決勝トーナメント進出確率、83.95%から47.22%に急降下した。
- 11月27日の日本戦に勝利したコスタリカが、決勝トーナメント進出確率、13.58%から44.44%に急上昇した。
- 11月27日のスペイン戦を引き分けたドイツが、決勝トーナメント進出確率、16.05%から19.44%と僅かに上昇した。

残念ながら、日本がコスタリカ戦に負けたことにより、他の3チームの決勝トーナメント進出確率を底上げする結果となってしまった。
どういう状況の時に、日本が決勝トーナメントに進出できるか見てみよう。

### 日本がスペイン戦に敗れた場合、グループリーグ敗退
日本がスペイン戦に敗れた場合、グループリーグ敗退する。コスタリカは引き分け以上で、決勝トーナメント進出。

```
  日本 x スペイン、 スペイン: 勝利
コスタリカx ドイツ 、引き分け
 スペイン、勝ち点 7: 決勝トーナメント進出
コスタリカ、勝ち点 4: 決勝トーナメント進出
  日本 、勝ち点 3: グループリーグ敗退
 ドイツ 、勝ち点 2: グループリーグ敗退
```

|   |試合数|勝ち数|引き分け数|負け数|得点数|失点数|得失点差|勝ち点|
|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|
|スペイン|3|2|1|0|9|1|+8|7|
|コスタリカ|3|1|1|1|1|7|−6|4|
|日本|3|1|0|2|2|3|−1|3|
|ドイツ|3|0|2|1|2|3|−1|2|

ドイツが決勝トーナメント進出するためにはコスタリカ戦に勝利しなければならない。

```
  日本 x スペイン、 スペイン: 勝利
コスタリカx ドイツ 、 ドイツ : 勝利
 スペイン、勝ち点 7: 決勝トーナメント進出
 ドイツ 、勝ち点 4: 決勝トーナメント進出
  日本 、勝ち点 3: グループリーグ敗退
コスタリカ、勝ち点 3: グループリーグ敗退
```

|   |試合数|勝ち数|引き分け数|負け数|得点数|失点数|得失点差|勝ち点|
|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|
|スペイン|3|2|1|0|9|8|+8|7|
|ドイツ|3|1|1|1|3|3|±0|4|
|日本|3|1|0|2|2|3|−1|3|
|コスタリカ|3|1|0|2|1|8|−7|3|

### 日本がスペイン戦で引き分けた場合
日本がスペイン戦で0対0で引き分けた場合、グループリーグ敗退する一例である。ドイツがコスタリカに勝利した場合、総得点で日本はグループリーグ敗退となる。

```
  日本 x スペイン、引き分け
コスタリカx ドイツ 、　ドイツ　: 勝利
 スペイン、勝ち点 5: 決勝トーナメント進出
 ドイツ 、勝ち点 4: 決勝トーナメント進出
  日本 、勝ち点 4: グループリーグ敗退
コスタリカ、勝ち点 3: グループリーグ敗退
```

|   |試合数|勝ち数|引き分け数|負け数|得点数|失点数|得失点差|勝ち点|
|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|
|スペイン|3|1|2|0|8|1|+7|5|
|ドイツ|3|1|1|1|3|3|±0|4|
|日本|3|1|1|1|2|2|±0|4|
|コスタリカ|3|1|0|2|1|8|−7|3|

日本がスペイン戦で1対1で引き分けた状態で、決勝トーナメント進出する一例である。ドイツが1対0でコスタリカに勝利した場合、得失点差、総得点で同点に並び、直接対決の結果で日本はトーナメント進出となる。
日本が引き分ける場合は全部で12通り、そのうち決勝トーナメント進出できるのは5通りである。

|   |試合数|勝ち数|引き分け数|負け数|得点数|失点数|得失点差|勝ち点|
|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|
|スペイン|3|1|2|0|9|1|+8|5|
|日本|3|1|1|1|3|3|±0|4|
|ドイツ|3|1|1|1|3|3|±0|4|
|コスタリカ|3|1|0|2|1|9|−8|3|

### 日本がスペイン戦に勝利した場合、決勝トーナメント進出
11月27日のスペイン対ドイツ戦が引き分けたため、12月1日のスペイン戦に日本が勝利すれば、必ず決勝トーナメント進出する。その場合、コスタリカがドイツ戦に勝利すれば、コスタリカが決勝トーナメント進出。

```
  日本 x スペイン、　　日本　: 勝利
コスタリカx ドイツ 、コスタリカ: 勝利
  日本 、勝ち点 6: 決勝トーナメント進出
コスタリカ、勝ち点 6: 決勝トーナメント進出
 スペイン、勝ち点 4: グループリーグ敗退
 ドイツ 、勝ち点 1: グループリーグ敗退
```

|   |試合数|勝ち数|引き分け数|負け数|得点数|失点数|得失点差|勝ち点|
|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|
|日本|3|2|0|1|3|2|+1|6|
|コスタリカ|3|2|0|1|2|7|−5|6|
|スペイン|3|1|1|1|8|2|+6|4|
|ドイツ|3|0|1|2|2|4|−2|1|

日本がスペイン戦に勝利した場合で、コスタリカがドイツ戦に引き分け以下で、スペインが決勝トーナメント進出。ドイツはコスタリカに勝利してもグループリーグ敗退となる。

```
  日本 x スペイン、  日本 : 勝利
コスタリカx ドイツ 、 ドイツ : 勝利
  日本 、勝ち点 6: 決勝トーナメント進出
 スペイン、勝ち点 4: 決勝トーナメント進出
 ドイツ 、勝ち点 4: グループリーグ敗退
コスタリカ、勝ち点 3: グループリーグ敗退
```

|   |試合数|勝ち数|引き分け数|負け数|得点数|失点数|得失点差|勝ち点|
|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|
|日本|3|2|0|1|3|2|+1|6|
|スペイン|3|1|1|1|8|2|+6|4|
|ドイツ|3|1|1|1|3|3|±0|4|
|コスタリカ|3|1|0|2|1|8|−7|3|

### 日本が決勝トーナメント進出するには?
上記の考察結果から、日本が決勝トーナメント進出するには

- 11月27日のスペイン対ドイツ戦が引き分けたため、日本がスペインに勝利すれば、自力で決勝トーナメントに進出できる。その場合日本が1位通過することになり、2位通過するチームは下記の表になります。下記の表に示していませんが、ドイツが勝利して決勝トーナメントに進出するには、コスタリカに8点差以上をつけて勝利する必要があります。

|   |日本がスペインに勝利|
|:-:|:-:|
|コスタリカ勝利|コスタリカ|
|引き分け|スペイン|
|ドイツ勝利|スペイン|

- 日本がスペイン戦引き分けで決勝トーナメントに進出するためには、ドイツ対コスタリカ戦が引き分けか、ドイツがコスタリカに1点差で勝利し、かつ、日本がスペインに1対1以上の得点を入れて引き分けた場合、日本が決勝トーナメントに進出できる。その確率は　5÷12=41.67%　である。

|   |スペイン戦0対0引き分け|スペイン戦1対1引き分け|
|:-:|:-:|:-:|
|コスタリカ勝利|コスタリカ|コスタリカ|
|引き分け|日本|日本|
|ドイツ1点差勝利|ドイツ|日本|
|ドイツ2点差勝利|ドイツ|ドイツ|

- 日本がスペイン戦に負ければ。グループリーグ敗退となる。この場合スペインが1位通過することになり、2位通過するチームは下記の表になります。スペインが勝利すれば、ドイツはコスタリカに1点差で勝利しても決勝トーナメント進出となります。

|   |スペインが日本に勝利|
|:-:|:-:|
|コスタリカ勝利|コスタリカ|
|引き分け|コスタリカ|
|ドイツ勝利|ドイツ|

## 最後に

2022年11月27日時点での、日本の決勝トーナメントに進出する確率がどのくらいか、Pythonスクリプトを作成して試してみました。
グループE 残り2試合の考察でも述べた通り、日本が決勝トーナメントに進出するためには、12月1日のスペイン戦で引き分け以上が絶対条件となりました。スペイン戦引き分けの場合、ドイツ対コスタリカ戦で引き分けてもらわない限り、日本が決勝トーナメントに進出するのは非常に難しい状況です。
隣のグループFではベルギーがモロッコに0対2で敗れるという波乱もあり、なんとかグループEを2位でも通過してもらいたいところです。
最後まで、この記事を読んでいただき、ありがとうございました。