K_DM Book
用語集
対象者 標準
対象者別の入口 →

対象者の設定はこのブラウザの中にだけ保存されます。

言語 JA

ウィンロスチャートで連勝・連敗を瞬時に把握

中級

06.7.12

ウィンロスチャートで連勝・連敗を瞬時に把握

最終更新 2020-07-01 読了時間 2 分
まとめ
ウィンロスチャートは、勝ち負けのような二値の結果を時系列順に並べ、勝ちを 0 ラインから上に、負けを下に伸びる同じ高さの棒で描いて、連勝・連敗の「塊」を色の帯として見せる図です。値の大きさは捨てて符号だけを残すので、スコア差ではなく流れ(勢い)の転換点を読むことに特化しています。matplotlib では results の +1 / −1 を np.where(results > 0, 1, -1) で棒の高さに、np.where(results > 0, "#22c55e", "#ef4444") で色にして ax.bar を 1 回呼ぶだけで描け、np.cumsum の累積勝敗を数試合ごとに文字で添えます。読み終えると、16 試合の中で 4〜6 戦目の 3 連勝と 14〜16 戦目の 3 連敗を緑と赤の塊として読み取り、営業の受注・失注や目標の達成・未達の履歴を同じ形で描けるようになります。

直感 #

直近 16 試合の勝敗を「○×○○○×××○×○○○×××」のように文字で並べると、連勝がどこで途切れたかを数えるのに目が疲れます。ウィンロスチャートは勝ちを上向きの緑の棒、負けを下向きの赤の棒にして横に並べます。緑 #22c55e が続く区間が連勝、赤 #ef4444 が続く区間が連敗で、色が切り替わる位置が流れの転換点です。棒の高さはすべて 1 で揃えるので、大勝も僅差も同じ棒になり、「どれだけ」ではなく「勝ったか負けたか」の並びだけに注目させます。4 試合ごとに累積の勝敗差(+2、+2、+1、−1 など)を添えれば、勢いが数値でも追えます。

Python で描く #

次のコードは 16 試合の結果を +1 / −1 で持ち、正なら高さ +1 の緑、負なら高さ −1 の赤の棒を描きます。0 ラインを引き、4 試合ごとに累積勝敗差をラベルで添えます。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
import matplotlib.pyplot as plt
import numpy as np

results = np.array([1, 1, -1, 1, 1, 1, -1, -1, 1, -1, 1, 1, 1, -1, -1, -1])
streaks = np.cumsum(results)
colors = np.where(results > 0, "#22c55e", "#ef4444")

fig, ax = plt.subplots(figsize=(6.4, 3.2))
ax.bar(
    np.arange(len(results)),
    height=np.where(results > 0, 1, -1),
    width=0.8,
    color=colors,
)
ax.axhline(0, color="#475569", linewidth=1)
ax.set_xticks(range(len(results)), labels=[f"{i+1}戦目" for i in range(len(results))], rotation=60)
ax.set_yticks([-1, 0, 1], labels=["負け", "", "勝ち"])
ax.set_ylim(-1.4, 1.4)
ax.set_title("直近16試合の勝敗シーケンス")
ax.set_ylabel("結果")

for idx, cumulative in enumerate(streaks):
    if (idx + 1) % 4 == 0:
        ax.text(idx, 1.15, f"{cumulative:+}", ha="center", fontsize=9)

fig.tight_layout()

plt.show()

ウィンロスチャートなら 0 ラインを挟んだ縦棒で勢いを表現できますの図

実行結果の読み方 #

上向きの緑が勝ち(+1)、下向きの赤が負け(−1)で、同じ色が続く区間が連勝・連敗です。この例では 4〜6 戦目に 3 連勝、7〜8 戦目に 2 連敗、11〜13 戦目に 3 連勝、14〜16 戦目に 3 連敗があり、終盤に流れが悪化していると読めます。棒の上の累積は 4 戦目 +2、8 戦目 +2、12 戦目 +4、16 戦目 +2 で、12 戦目をピークに勝ち越し幅が縮んだことを数値で裏付けます。棒の高さがすべて同じなので、「大勝だったか」は読めない点を意識して使います。

使いどころと落とし穴 #

ウィンロスチャートは、スポーツの戦績、営業の受注・失注、日次目標の達成・未達のように二値の結果が時系列で並ぶデータで、ストリークと転換点を見せる場面に向いています。勝ち幅や負け幅の大きさを表せないので、スコア差が重要なら棒の高さに差分を使うダイバージングバーに切り替えてください。数百試合を 1 行に詰めると個々の棒が 1 ピクセル以下になって読めないため、シーズンや四半期ごとに plt.subplots(nrows=...) で行を分けます。二値だけでは「大勝と僅差の勝ち」の区別がつかないことを読者に伝えるため、必要なら得点差の折れ線を別図で併記します。