チャリロトのキャンセル

宝くじの還元率は50%程度であり、回収率の期待値を上げる合理的な方法はないので還元率がそのまま期待回収率になる。期待値で考えると宝くじを買うことは損である。だから私は宝くじを買わない。ならば、もし、還元率が100%を上回る、例えば500%(!)の宝くじがあったらどうだろう。これは買いだろうか。しかし還元率が500%ということは当せん金が同じだとすると当せん確率が500/50=10倍になっているということであり、宝くじの当たる確率は元々著しく小さいのでそれが10倍になったところでやはりはずれることが圧倒的に多いことには変わりがない。だから期待値が高いと言ってその宝くじに飛びつくのは考え物だ。もし確実に当たる程大量の枚数を購入できたら話は別だが、一等2億円の宝くじなら最低でも2、3億円位買わないと安心できないしそんな大金は用意できない...。などとたわむれに考えたことがあった。しかし、今、この状況が平塚チャリロトで現実になって来ている。

ランダム方式の重勝式 - 競輪雑考でチャリロトを分析し、期待回収率の上限が125%であることを示した。この分析では「キャンセル」を考慮に入れていない。キャンセルとは、投票時にコンピュータが発行した組番を気に入らなければ再度発行させる操作のことであり、1日に300回までできる。出現する確率が高いと思われる目が出るまでキャンセルを繰り返すことで当たる確率を増大させることができる。このことによって回収率も高くなり状況によってはキャンセル無しのときの上限125%を大きく上回る可能性がある。

キャンセルを効果的に使うとどのくらい的中確率を高めることができるか概算してみる。まず前提条件として、全てのレースの全ての選手についてその選手が1着になる確率を投票者が知っているとする。このような真の確率は誰も知りようがないので実際は予想を行って推測することになる。レースと選手を指定するとその1着確率が書いてあるような表を投票者が持っているとするわけだ。このとき次のようなアルゴリズムで投票する。

  • (1)目標とする確率pを決める。
  • (2)コンピュータに組番を発行させる
  • (3)その組番の的中確率を計算して、p以上だったらその組番に決定して終了する
  • (4)キャンセルが300回に達していたら買わずに終了する
  • (5)その組番をキャンセルして(2)に戻る

(3)で的中確率を計算するというのは、その組番が指定する選手全ての1着確率を掛け合わせて求める。このアルゴリズムを実行すると確率p以上で的中する車券が買えるか(=成功)、もしくは車券が何も買えない(=失敗)ことになる。pを小さく設定すると成功の可能性が高くなり、欲張って大きなpを目標にすると失敗しやすくなる。

具体的な数値を与えて確率pの車券を買うことができる確率を疑似乱数を使った計算機シミュレーションで算出してみる。まず、各選手の1着確率は予想方式の重勝式 - 競輪雑考で使った表1とする。これはオッズから求めた単の人気順位別の勝率である。どのレースでも表の同じ値を使う。大雑把にはこれでよいだろう。発行される組番は乱数を使って生成し、上で示したアルゴリズムに従うと成功か失敗かを出力するプログラムができる。適当なpを与えてそのプログラムを多数回動かしその結果を集計することで成功する確率が見積もれる。ランダムな目が的中する確率はP=1/(9^7)、約480万分の1であるが、目標確率pはこのPの何倍かで表すことにする。計算結果は以下になった。

目標確率p 成功率(%)
10*P 99.47
50*P 60.48
100*P 30.16
200*P 12.75
300*P 6.23
500*P 2.47
1000*P 0.41

目標確率を10*P、すなわちランダムな選択時の確率の10倍に設定すればほとんど成功する。的中確率が10倍に上がった車券を買うことは簡単にできることになる。50倍でも60%程、100倍で30%程成功する。300倍以上にすると成功率は低くなって来る。適切な目標を設定すれば2回に1回くらいの割合で的中確率が50倍から100倍程になる車券が買えることが分かった。

このように的中確率を上げることが期待回収率にどう影響するか考える。例えば、現在の平塚だとキャリーオーバーが6.26億円あるが、仮りに2千万円売上げがあったとすると、キャンセルを考慮しなければ期待回収率は62.1%になる。これはランダム方式の重勝式 - 競輪雑考に書いたやり方で計算した。もし、誰もキャンセルをしなかったとしたら、的中確率の増加倍率で回収率が増加する。すなわち、100*Pの的中確率が得られたなら、回収率は100*62.1=6210%になる。反対に、全ての投票者が同様な方法でキャンセルを繰り返して的中確率を上げてくると、個々の投票者の有利さはなくなり回収率は変わらない。現実にはここで書いてるような効率的なキャンセル戦略を取る投票者は稀であり、数回のキャンセルで止める人が大多数だろうから、100倍の回収率は無理でも数十倍にはなりそうだ。

選手の1着確率の推定には誤差があるから期待回収率はさらに低くなるだろうが、数百%は楽に達成できるだろう。平塚は今キャリーオーバーが6億超なので的中が出たときの配当金が億単位になるのは必至である。以上より現在の平塚チャリロトはキャンセルを有効に使えば冒頭に書いた夢の宝くじと同等になると言える。ただし、ひとつ異なる点があって、この方法では一回の発売に大金を投じることができない。キャンセルは「1日」に300回までだからせいぜい2、3枚しか買えないだろう。まあ、余計な悩みがなくて健全ではある。

普通の車券やセレクトと違ってチャリロトは基本的にくじなのであり、投票者が回りくどいやり方で予想能力を発揮できてしまう「キャンセル」はない方が良いと思う。最後にシミュレーションを行ったRubyスクリプトを示す。

# -*- coding: utf-8 -*-

P = 1.0 / 9**7
PS = [0.37435, 0.21519, 0.14202, 0.09730, 0.06969, 0.04696, 0.02795,
      0.01814, 0.00840]

def pr_hit(n_race)
  pr = 1.0
  n_race.times{pr *= PS[rand(9)]}
  pr
end

def sim(r_pr)
  pr_target = r_pr * P
  300.times do
    pr = pr_hit(7)
    return(pr / P) if pr >= pr_target
  end
  nil
end

def mean(a)
  a.inject(0){|t, e| t += e}.to_f / a.size
end

n = 10000
[10, 50, 100, 200, 300, 500, 1000].each do |r_pr|
 a = n.times.map{sim(r_pr)}.select{|e| e}
 p [r_pr, a.size.to_f / n, mean(a), a.sort[a.size/2]]
end

#=>
## 目標確率/P, 成功率, 決定した組番の的中確率の平均/P, 前項のメジアン
# [10, 0.9947, 41.0435669532042, 20.4782837886827]
# [50, 0.6048, 131.931655410517, 80.2347164255827]
# [100, 0.3016, 229.776413030948, 160.560088240491]
# [200, 0.1275, 386.156065270533, 279.314415320544]
# [300, 0.0623, 563.30635443857, 423.219750970481]
# [500, 0.0247, 895.070811147524, 709.227831802187]
# [1000, 0.0041, 1456.33395019455, 1280.78853439145]

「車券予想に関する顧客満足度向上に関する取組」

KEIRIN.JPで車券予想に関する顧客満足度向上に関する取組について(pdf)という資料が公開された。この中で私が注目する項目について意見を述べたい。

3連単発売制限

「webアンケートで90%が現状支持」すなわち客は制限反対が圧倒的に多数であるということだ。3連単の賭け式別売上げシェア70%から考えても当然の結果だろう。しかし、3連単発売制限は完全に破棄されたわけではなく「お客様からの支持は得られていない。しかし一部施行者が3連単を発売制限したいと回答しており、お客様のご意見から推察できるリスクを踏まえ、お客様の満足度向上が得られるとの確信を得ている一部の施行者が実施に向けた検討を行うことは否定しない」という。うーん、なんでこんな望みが薄くリスクの高いことに執着するのだろう。純粋に理由が知りたい。(参考:3連単の発売制限はすべきでない - 競輪雑考, 3連単で資金の回転が悪くなるか? - 競輪雑考)

単勝

アンケートによると客のニーズはあるが実施する予定は無くて引き続き検討するそうである。控除率をどうするかも触れられておらず、最初からあまりやる気が無かったのかもしれない。G3以上のレースだけでいいから控除率20%の単勝を売るとおもしろいと思うのだが。(参考:賭け式と控除率の関係 - 競輪雑考)

競技ルール

実際に改定されるルールを見ないとはっきり分からないが、落車がない失格の判定明確化をやろうとしているようだ。大雑把にいうと競輪で失格になるのは、内抜きと故意の接触で落車させた場合であるが、落車させなくても故意の接触が度が過ぎる相当ひどいときは失格になる。この場合の判定を客観的にする。しかし、明確化できればそれに越したことはないが、難しく微妙な判定を無理にすると返って客は混乱し不満を持つ。落車させたら失格という大原則が揺るぐことがない改定を望みたい。

概定番組

F1、F2(A12班)、G3の全ての概定を変える大きな改定である。個人的には全くうんざりする。この前チャレンジを導入した大改定から2年半しかたっていない。基本的で広範囲に影響がある変更を頻繁にやられては、予想法の再検討を強いられその間車券が買えなくなってしまう。チャレンジ導入のときは半年以上休んだが今回はどうしようか。良い方向に変化することは間違ったことではないが、安定したルールを維持することも投票者にとって大きな利益になることをJKAは考えるべきだろう。

G3の準決勝、2次予選をシンプルに

A、Bとかあったのを一つの種目にして、客が馴染んでいる普通の形式にする。これは良い思う。

F1、F2(A12班)、G3で初日選抜をなくす

初日は特選と予選だけになる。これには驚いた。初日が本命レースばかりになってしまうと思うんだが、これで多くの客の満足度が上がって売上げが伸びるのだろうか。どこからでも狙える穴レースが好きな客の不満はどうするのか。

F2の初日を考える。今は7個レースのうち4個が予選だからこの開催に参加している選手の下位4/7=57.1%の選手が予選を走ることになる。新概定だと7個レースのうち6個までが予選になるので6/7=85.7%が予選回りである。これだけ多くの割合の選手が1つの種目に割り当てられると1つのレースの中での選手の強弱がはっきりしてしまい、現状よりかなり本命レースが多くなる。

F2はチャレンジの初日がオール予選であるため、現状でも本命レースが非常に多い。チャレンジ予選のオッズから求めた本命選手の勝率は2009年で54.8%にも及ぶ(競輪全体での勝率は38.5%)。新概定のF2初日は1Rから11Rまでずらっと本命レースが並ぶことになりかねない。これを客が望んでいるのか大いに疑問だ。

資料にお客様のご意見として「レースの主役がはっきりして買いやすい」とある。もちろんそういう人もいるだろうが、実力拮抗のレースが好きな人もたくさんいてその結果うまくバランスして全体の満足をもたらすのだと思う。新概定は明らかにバランスが悪い。これで「初日はかたいレースばかりでつまらない」というアンケート結果が多かったらまた変えるんだろうか。

全競輪場のネット中継を視聴できるコマンドラインツール

クールで機能的な競輪場リンク集 - Doing It To Deathで知った競輪場のリンク集やっぱ競輪は楽しいジャンが素晴らしい。ネット中継へのリンクがasxファイルへじかになっているのが良い。この情報を利用して、競輪場を指定するとそのネット中継をmplayerで見ることができるRubyスクリプトを書いてみた。ruby-1.9.1で動作を確認している。

#! /usr/bin/env ruby
# -*- coding: utf-8 -*-

require 'rexml/document'
require 'open-uri'

URL_TOP = 'http://keirinn.web.fc2.com/'

def find_bank(elm)
  return unless elm
  name = elm.attributes['class']
  return(name) if name
  find_bank(elm.parent)
end

bank_input = ARGV.shift
src = open(URL_TOP, 'r:Shift_JIS'){|input| input.read}.encode('UTF-8').
      sub(/<!-{2} FC2, inc.-{2}>.+<!-{2} FC2, inc.-{2}>/m, '')
a = REXML::Document.new(src).
    elements.to_a("//img[contains(@src,'kamera_')]").
    map{|e| [find_bank(e), e.parent.attributes['href']]}.
    select{|e| e[1]}.sort

cs = a.select{|bank, url| /^#{bank_input}/ =~ bank}
case cs.size
when 1
  system "mplayer -playlist '#{cs[0][1]}'"
when 0
  puts 'your input is wrong.', 'all candidates:'
  a.each{|e| printf(" %-s\n", e[0])}
else
  puts 'your input is ambiguous.', 'candidates:'
  cs.each{|e| printf(" %-s\n", e[0])}
end

このスクリプトをファイル名k-liveでコマンドパスの通った所に保存して実行権限を与える。コマンドライン

% k-live tachikawa

とすれば立川のネット中継がmplayerで見れる。競輪場名が特定されるなら

% k-live tachi

と後ろを省略してもよい。特定できない名前を指定すると

% k-live.rb matsu
your input is ambiguous.
candidates:
 matsudo
 matsusaka
 matsuyama

のように候補を示して何もしない。

私はscreenを常用しているので次のようなスクリプトを用意している。

#! /bin/sh
screen -X eval "screen 1 k-live $1" 'other'

これだとこのコマンドを実行したscreenのウインドウがmplayerの出力で汚れることがないしmplayerの出力を見たければいつでも見れる。

これを作って非常に快適になった。CUI中心の計算機生活を送っている競輪ファンはお試しあれ。

競馬の学術的研究

非常に興味深いブログを見付けたので紹介する。

研究情報

競馬研究の論文集「Efficiency of Racetrack Betting Market」の要約などが日本語で書いてある。競馬に関する学術研究には関心があってwebで断片的に情報を集めていたのだが、このように日本語でまとめてもらえると非常にうれしい。競輪はレースギャンブルであるので当然競馬との共通点も多く非常に参考になる。本ブログの3連単と2車単のオッズによる回収率 - 競輪雑考Harvilleの公式と競輪 - 競輪雑考は競馬の研究から触発されて書いた。

競輪を題材として研究する学者は現れないものか?

狙いは中穴

高配当車券は過大に評価される

3連単と2車単のオッズによる回収率 - 競輪雑考で車券を配当倍率の範囲で分類しその範囲にある車券の回収率を調べた。これによって高配当の車券ほど回収率が低下することが分かった。2008年、2009年の新しいデータで集計したもので配当倍率-回収率の特性をグラフにすると以下になる。

右端の不安定な超高配当領域を除くと、やはり右下がりの曲線になっている。高配当の車券はその的中確率とは独立に過剰に投票される性質があると考えられる。このため高配当な車券ほど実質的な控除率が高くなっているとも考えられ、高配当な車券ほど儲けるのが難しい。

低配当車券は正確に評価される

2車単で3.0倍付けてる目があるとする。控除率が25%だから、0.75/3.0=0.25となって全投票のうち25%の票がこの目に投じられたことになる。投票者全体の総意としてこの目が的中する確率を25%と判断しているとも解釈できる。

この目の的中する確率をpとすると、この目の車券を買ったときの回収率の期待値Eは、E=p*3.0になる。もし全体の意見が正しくてp=0.25だとしたらE=0.25*3.0=0.75となってE<1.0なのでこの目の車券を買っても儲からない。E>1.0であるには、p*3.0>1.0からp>0.33である必要がある。

p>0.33であるとすると0.33-0.25=0.083から、少なくとも全投票の8.3%が間違っていたことになる。反対に言えば、3.0倍の目を買って儲かるには、全投票の8.3%以上が誤った判断の票を投じていることが必要になる。

次に、30.0倍の目を同様に考える。30.0倍の目を買って儲かるには、全投票の1.0/30-0.75/30=0.83%以上が誤った判断の票を投じることが必要になる。3.0倍が儲かるには8.3%もの票が誤っている必要があるのに対し、30.0倍ではわずか0.83%でよい。よって、3.0倍の方が儲けにくいと考えられる。

低配当な目は多く人が多くの票が投じるのでそれだけ評価も正確になるのに対し、高配当な目は少数の人の判断しか反映されないので評価の散らばりが大きくなる。車券で勝つには過小に評価されている目を探してそれに賭ける必要があるのだから、低配当な目より高配当な目の方が適している。

中間的な配当の車券にチャンスがある

以上のように、高配当な目は一攫千金を狙う人の票が過剰に投じられて回収率が下がるバイアスがあり、一方、低配当な目は多くの人の投票で正確な評価になりやすく利を取ることのできるレースがあまりない。よって、儲けるチャンスが大きいのは低配当でも高配当でもない中間的な配当、すなわち中穴を狙うのが良いと私は考える。

向日町記念決勝

兄弟がそろって乗った地元記念決勝を生で見る機会なんてそうそうないと思い向日町まで行って来た。選手も客も熱くなるのは必至だ。結果は何と兄弟でワンツーを決めてしまった。私の車券の方は何とかかすっただけだがちょっとうれしい。現地で買った車券が当たったのは2002年の甲子園最終レース以来だ*1。そう言えば西宮の最終レースとなった記念決勝で勝ったのも村上兄だった。

ゴール後ガッツポーズで周回する村上兄に対する拍手と歓声はすさまじく、後の表彰式と合わせてこんなに盛り上がった向日町を経験するのは初めてだ。やはり活気のある競輪場は良い。今日は来て良かった。

*1:言い訳がましくなるが私は車券の99.9%はネットで買っている

3連単で資金の回転が悪くなるか?

3連単は売上げに悪い影響を与えているという主張の根拠として最もありそうなのが、客の資金の回転が悪くなるというものだ。高配当を当てて大きく儲けた人が大勝ちしたので帰ってしまい、場から大金が消えて全体の売上げが伸びないという現象が起こっている恐れがある。ただし、3連単の発売制限はすべきでない - 競輪雑考でも書いたが実際どうなのかは実証がなければ分からない。そこで競輪見太郎のデータを元に自分で分析してみることにした。

レースごとの売上げ分布

競輪の1日に行われるレースにおいてはレースが進む程売上げが多くなり、メインである最終レースの売上げが最も多くなる。レース番号が大きい程売上げが多くなる傾向にあるわけだ。もし3連単で資金の回転が悪くなるなら、前半に比べて後のレースの売上げの伸びが小さくなることになる。1日の売上げのうち何%がそのレースによって占められるかを示すレースごとの売上げ割合の分布を考えると、3連単が売られる競輪場ではそうでない場に比べて、後のレースでの売上げ割合が小さくなると考えられる。図でかくと下のような感じだ。

こういうことが3連単の発売のある/なしで実際に起こっているかを調べる。

2002,2003年のデータ

今は全てのレースで3連単が売られているので、まだ全ての場で3連単が売られてなかった2002,2003年のデータを調べる。レースごとの売上げはその種目に大きく左右される。例えば同じ第10レースでも準決勝と決勝では決勝の方が多くなるし、負け戦は勝ち上がりより売れない傾向がある。この性質の影響を無くすため、同一の概定番組のレースのみを集めて比べることにした。この時期最も多く行われたA級10R制の102A96、102A98のレースのデータを使うことにした。この概定番組は通常他の概定と組み合わせて行われないので都合が良い。ただし一部国際競輪と合わせて12Rで行われた開催が少数あったのでこれらは除外した。また、川崎では最終3日目の決勝が10Rでなく9Rに行われるため、川崎の3日目のレースは除外した。

A級10R制の売上げ分布

対象となるレースで3連単を発売していないレースは14310個レースあり、発売しているレースは20790個レースあった。それぞれのグループに対し、1Rから10Rに分けて売上げを集計し全売上げで割って割合を算出した。この売上げは両者とも発売している全ての賭け式の売上げの合計である。結果は下の表のようになる。

レース番号 売上げ割合
3連単なし(A)
売上げ割合
3連単あり(B)
差(B-A)
1 3.73 3.90 0.17
2 4.46 4.64 0.18
3 5.64 5.82 0.18
4 6.72 6.99 0.27
5 8.25 8.46 0.21
6 9.66 9.70 0.04
7 11.28 11.34 0.06
8 13.38 13.33 -0.05
9 14.81 14.64 -0.17
10 22.06 21.19 -0.87
(単位:%)

売上げ割合をプロットする。

分布を示すグラフの形状は3連単の発売のある/なしでほとんど同じに見える。大きな差はないと言える。詳しく見るために3連単あり/なしの割合の差をプロットしてみる。

値そのものは小さいが、3連単ありはレースが進むにつれて売上げの伸びが3連単なしに比べて小さくなっていくことが分かる。これは回転が悪くなった場合の特徴である。

3連単ありの分布は資金の回転が悪くなったことを示すようにわずかにずれることが分かった。しかしそのずれは非常に小さく売上げ全体に与える影響も非常に小さい。表より8,9,10Rで計1.09ポイント売上げの割合を落としているが、これがもし全て勝ち逃げで場からなくなった金による影響だとしても、全売上げの1.09%が減少したに過ぎない。

以上より、3連単で資金の回転が悪くなって売上げが減少するとは言えない。そのようなことがあったとしてもその影響は非常に小さい。