a
    ?2ej(  ã                   @   sŠ   d Z ddlZddlZddlZddlZddlmZ dddddœZdZ	dZ
d	d
„ Zdd„ Zdd„ Zdd„ Zddd„Zdd„ Zedkr†eƒ  dS )a•  
Does the South American home/draw anomaly survive on THOUSANDS of games?
(read-only, trades nothing, downloads public CSVs)

WHY THIS EXISTS: research/region_calibration_test.py found, on 73 fixtures of our
own data, that Pinnacle appears to under-price SA homes (48.2% -> 60.3% actual)
and over-price draws (27.4% -> 16.4%). Suggestive, sign-consistent across 5/5 SA
leagues -- but 73 games is nothing, and the observed draw rate contradicted the
well-known ~26-28% historical base rate for these leagues.

This settles it with football-data.co.uk's /new/ archive, which carries PINNACLE
CLOSING odds (PSCH/PSCD/PSCA) -- the same anchor our live pipeline uses -- for
thousands of Brazilian and Argentine fixtures.

CONTROLS:
  - Mexico + USA as non-SA western-hemisphere comparisons (same data source,
    same devig, same code path) so any finding is not an artifact of the pipeline.
  - Per-league and per-season breakdowns: a real structural effect is stable
    across seasons; a fluke lives in one or two.
  - Reports our own 73-fixture sample alongside, to show directly how far it sat
    from the long-run rate.

Usage:  python research\sa_history_calibration.py
é    N)Údefaultdictú	S.AmericaÚcontrol©ZBRAZARGZMEXZUSAz*https://www.football-data.co.uk/new/{}.csv))ZPSCHZPSCDZPSCA)ZAvgCHZAvgCDZAvgCAc              	   C   s8   zt | ƒ}|dkr|nd W S  ttfy2   Y d S 0 d S )Nç      ð?)ÚfloatÚ	TypeErrorÚ
ValueError)ÚxÚv© r   ú,E:\soccer\research\sa_history_calibration.pyÚ_f(   s
    r   c                    s,   dd„ | D ƒ}t |ƒ‰ ‡ fdd„|D ƒˆ fS )Nc                 S   s   g | ]}d | ‘qS )r   r   ©Ú.0r   r   r   r   Ú
<listcomp>1   ó    zfair.<locals>.<listcomp>c                    s   g | ]}|ˆ  ‘qS r   r   r   ©Úsr   r   r   3   r   )Úsum)ÚoÚimpr   r   r   Úfair0   s    r   c                 C   s6   t  | | d|  ¡}|dkr.|||   | S tdƒS )Né   r   Únan)ÚmathZsqrtr   )ÚnÚpZactualZsdr   r   r   Úz_for6   s    r   c           
         sê   t jjt | ¡dd� ¡ }| dd¡}g }t t	 
|¡¡D ]ª‰ ˆ  d¡pJd ¡  ¡ }|dvr^q:d }tD ]&}‡ fdd	„|D ƒ}t|ƒrf|} qŽqf|s”q:t|ƒ\}}	| tˆ  d
¡p²|  ¡ ˆ  d¡pÂd ¡ ||d |d |d |	d�¡ q:|S )Né<   )Ztimeoutz	utf-8-sigÚreplaceZResÚ )ÚHÚDÚAc                    s   g | ]}t ˆ  |¡ƒ‘qS r   )r   Úget)r   Úc©Úrr   r   r   E   r   zfetch.<locals>.<listcomp>ZLeagueZSeasonr   r   é   )ÚlgÚseasonÚresÚpfhÚpfdÚpfaÚover)ÚurllibZrequestZurlopenÚURLÚformatÚreadÚdecodeÚcsvZ
DictReaderÚioÚStringIOr%   ÚstripÚupperÚ	ODDS_SETSÚallr   ÚappendÚdict)
ÚcodeÚrawZtxtÚoutr,   ZoddsZcolsZvalsZpfr0   r   r'   r   Úfetch;   s*    þ
rB   ú  c                    sÔ   t | ƒ}|dk r0t|› |d›d|d›d�ƒ d S |› |d›d|d›�g}dD ]t\‰ ‰t‡ fdd„| D ƒƒ| }t‡fd	d„| D ƒƒ}| ˆ› d
|d d›d|| d d›dt|||ƒd›d�¡ qLtd |¡ƒ d S )Né   Z34sz n=Z5dz  -- too few))r-   r"   )r.   r#   )r/   r$   c                 3   s   | ]}|ˆ  V  qd S )Nr   ©r   r
   ©Úkeyr   r   Ú	<genexpr>Y   r   zline.<locals>.<genexpr>c                 3   s   | ]}|d  ˆ kV  qdS )r,   Nr   rE   )Úletterr   r   rH   Z   r   ú éd   z5.1fz->z (zz+6.2fú)z   )ÚlenÚprintr   r=   r   Újoin)r   ZlabelÚindentr   Úpartsr   Zcntr   )rG   rI   r   ÚlineR   s    &ÿrR   c                  C   s  i } t D ]l}z.t|ƒ| |< td|› dt| | ƒ› d�ƒ W q tyr } z td|› d|› �ƒ W Y d }~qd }~0 0 qtƒ  dd„ |  ¡ D ƒ}dd„ |  ¡ D ƒ}td	ƒ t|d
ƒ t|dƒ tƒ  tdƒ dD ]r}|| vrÜqÎttƒ}| | D ]}||d   	|¡ qìt
| ¡ dd„ d�d d… D ]\}}t||› d|› �ƒ �q qÎtƒ  tdƒ ttƒ}|D ]}||d   	|¡ �q\t
| ¡ ƒdd … D ]\}	}t|d|	› �ƒ �qŠtƒ  t|ƒ}
tdd„ |D ƒƒ|
 }tdd„ |D ƒƒ}tdd„ |D ƒƒ|
 }tdd„ |D ƒƒ}tdƒ tdƒ td|
› d |d! d"›d#||
 d! d"›d$|d! d"›d#||
 d! d"›�
ƒ td%||
 | d! d&›d'||
 | d! d&›d(�ƒ tƒ  td)ƒ td*||
 | d+ d! d,›d-�ƒ d+| }d+||
  }td.|| d+ d! d,›d/�ƒ td0td1d„ |D ƒƒ|
 d+ d! d"›d-�ƒ d S )2Nz
  fetched z: z usable fixturesz  fetch z	 FAILED: c                 S   s*   g | ]"\}}t | d kr|D ]}|‘qqS )r   ©ÚFEEDS©r   r&   r   r
   r   r   r   r   j   r   zmain.<locals>.<listcomp>c                 S   s*   g | ]"\}}t | d kr|D ]}|‘qqS )r   rS   rU   r   r   r   r   k   r   zCHEADLINE  (implied -> actual, Pinnacle closing, proportional devig)zSOUTH AMERICA (Bra+Arg)zCONTROL (Mex+USA)zBY COUNTRY / LEAGUEr   r*   c                 S   s   t | d ƒ S )Nr   )rM   )Zkvr   r   r   Ú<lambda>y   r   zmain.<locals>.<lambda>rF   é   rJ   zBSOUTH AMERICA BY SEASON  (a real effect is stable; a fluke is not)r+   iôÿÿÿzseason c                 s   s   | ]}|d  V  qdS )r-   Nr   rE   r   r   r   rH   †   r   zmain.<locals>.<genexpr>c                 s   s   | ]}|d  dkV  qdS )r,   r"   Nr   rE   r   r   r   rH   ‡   r   c                 s   s   | ]}|d  V  qdS )r.   Nr   rE   r   r   r   rH   ˆ   r   c                 s   s   | ]}|d  dkV  qdS )r,   r#   Nr   rE   r   r   r   rH   ‰   r   z%VERDICT vs our 73-fixture live samplez;  our sample said:  homes 48.2 -> 60.3   draws 27.4 -> 16.4rC   z games say:  homes rK   z.1fz -> z	   draws z  long-run home edge: z+.2fzpp   draw edge: Zppz*  TRADE ECONOMICS implied by the long run:z*    buy every home at Pinnacle fair : ROI r   z+.1fú%z*    buy home+away (fade the draw)   : ROI z/%   (before any vig -- real books charge ~4-7%)z&    avg Pinnacle overround in sample: c                 s   s   | ]}|d  V  qdS )r0   Nr   rE   r   r   r   rH   ˜   r   )rT   rB   rN   rM   Ú	ExceptionÚitemsrR   r   Úlistr=   Úsortedr   )Údatar?   ÚeZsaZctlZbyr
   r*   r   r+   r   ZiHZcHZiDZcDZnd_impZnd_actr   r   r   Úmain`   sn    ",

$&ÿÿÿ
"ÿr_   Ú__main__)rC   )Ú__doc__Zurllib.requestr1   r7   r6   r   Úcollectionsr   rT   r2   r;   r   r   r   rB   rR   r_   Ú__name__r   r   r   r   Ú<module>   s$   þ
;