a
    è1ÞigZ  ã                c  @   sÚ  d Z ddlZddlZddlmZ ddlmZ ddl	Z	e	 
d¡ dZdZdZg d	¢Zd
ddddddddœZg d¢Zddddddddddddd d!d"d#œZd$d%„ Zed&ƒ e d'¡Ze ed( ¡ed(< d)d*„ ejD ƒZd+d*„ ejD ƒZee Zeed, d-k g d.¢e   ¡ Zg d.¢d/d*„ eD ƒ e_eed, dk d0ge   ¡ Zd0gd1d*„ eD ƒ e_ejed0d2d3�Zed4 ed5 k  e!¡ed6< ed7e"eƒd8›d9�ƒ ed:ƒ g d;¢Z#g Z$e %¡ D ]ªZ&e#D ]žZ'd<e&› d=e'› d>�Z(zxeje(d?d@�Z)dAe)jv�södBe)jv�rüW �q¸e)j*g dC¢dD�Z)eje)dE dFdGdH�e)dE< e)j*dEgdD�Z)e&e)dI< e$ +e)¡ W n   Y n0 �q¸�q°ej,e$dFdJ�Z-e.e-j/dKdL„ d-dM�Ž \Z0Z1Z2ej3e2e-j4dN�e-dO< d-e-dO  e-dP< e-dA e-dP  e-dP  e-dQ< ed7e"e-ƒd8›dR�ƒ edSƒ ed( j5 6dT¡edU< e-dE j5 6dT¡e-dU< dVdWdXdYdZd[d\d]d^d_d_d`dadbdcdddddededfdgdhdidjdjdkdldmdndodpdqdrdsdtdudvdwdxdydzd{d|d}d~dd€d�d‚dƒd„d…d†d‡dˆdˆd‰dŠdŠd‹dŒd�dŽd�d�d‘d‘d‘d’d’d“d”d”d•d•d–d–d—d˜d™dšdšd›d›dœdœd�dždŸdŸd d¡d¢d£d¤d¥d¦d§d¨d¨d©dªd«d¬d­d®d¯d°d±d²d³d´dµd¶d·d¸d¹dºd»d¼d¼d½d¾d¿dÀdÁdÂdÃdÄdÅdÆdÇdÈdÉdÊdËdÌdÍdÎdÏdÐdÑdÒdÓdÓdÔdÕdÖdÖd×dØdÙdÚdÛdÜdÝdÞdßdàdádâdãdädådædædçdèdédêdëdìdídîdïdðdñdñdòdòdódôdôdõdöd÷dødùdúdûdûdüdýdýdþdÿ�d �d�d�d�d�d�d�d�d�d�d	�d
�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�d�dd‰d‰�d�d�d�d�d�d�d�d�d �d!�d"�d#�d$�d%�d�d&�d'�d(�d)�d*�d+�d,�d-�d.�d/�d0�d1du�d2�d3�d4�d5�d6�d7�d8�d9�d:�d;�d<�d=�d>�d?�d@�dA�dB�dC�dD�dE�dF�dG�dH�dI�dJ�dK�dL�dM�dN�dO�dP�dQ�dR�dS�dT�dU�dV�dW�dX�dY�dZ�d[�d\�d]�d]�d^�d_�d_�d`�da�db�dc�dd�de�df�df�dg�dh�di�di�dj�dk�dk�dl�dm�dn�do�dp�d/dn�dq�dq�dr�ds�dq�dt�dud·�dv�dw�dx�dy�dz�d{�d|�d}�d~�d�d�d€�d��d‚dª�dƒ�d„�d…�d†�d‡�dˆ�œbZ7�d‰�dŠ„ Z8e�d‹  /e8¡e�dŒ< e�d�  /e8¡e�dŽ< e-�d�  /e8¡e-�dŒ< e-�d�  /e8¡e-�dŽ< eje-g �d‘¢ g �d’¢d2d3�Z9e"e9ƒe"eƒ�d“ k �r@eed0  :e9d0 ¡  Z;e; <dI¡ /�d”dL„ ¡Z=e�d•e"e9ƒe"eƒ �d– �d—›�d˜�ƒ e= >¡ D ]8\Z?Z@e@�r�d™d*„ e@D ƒZAe�dše?› �d›eA› �ƒ �qed7e"e9ƒd8›�dœ�ƒ �d�d*„ eD ƒZB�džd*„ eD ƒZCg ZDe.eBeCƒD ]<\ZEZF�dŸeE�d d…  ZGe9eE e9eF  e9eG< eD +eG¡ �q†eBeC eD ZHed7e"eHƒ› �d¡�ƒ e�d¢ƒ g ZIeD �]*ZJe9e9�d£ eJk  j*eHdD�ZKe9e9�d£ eJk j*eHdD�ZLe"eKƒ�d¤k �	sRe"eLƒ�d¥k �	r‚e�d¦eJ› �d§e"eKƒ› �d¨e"eLƒ› �d©�ƒ �qøeKeH jMZNeKd6 jMZOeLeH jMZPe�dª�d«�d¬�d­�d®�d¯�ZQeeQ�d°�d±�d²�ZReR SeNeO¡ eR TeP¡dd…d-f ZUeL ¡ ZLeUeL�d³< eeJ ZVe"eLƒZWeLdQ ek X¡ ZYeL�d³ ek X¡ ZZeLeL�d³ ekeLdQ ek@  Z[eLeLdQ ek Z\eLeL�d³ ek Z]e"e[ƒZ^e[ _¡ D �]¬\Z`ZaeadA d- ZbeadO Zcebdk�
rÊedeceb d-ec  eb dƒndZeeedk�
rÜ�
qˆeadA eadP  eadP  �d– ZfeI +eadU eVe geadI eadI ¡eadI ea�d‹ ea�d� ea�d´ e hea g�dµ¡¡�rXe!ea�dµ ƒn�d¶e hea g�d·¡¡�r~e!ea�d· ƒn�d¶e hea g�d¸¡¡�r¤e!ea�d¸ ƒn�d¶e hea g�d¹¡¡�rÊe!ea�d¹ ƒn�d¶e!ea�d´ �dºkƒeieadA �d ƒeieadP �d»ƒeief�d ƒeiea�d³ �d¼ƒeiee�d¼ƒeiec�d¼ƒ�d½œ¡ �
qˆ�d¾�d¿„ Zjeje\ƒ\ZkZlZmeje]ƒ\ZnZoZpeje[ƒ\ZqZrZse�dÀeV› �dÁeW› �dÂ�ƒ e�dÃek�dÄ›�dÅem�dÆ›�dÇel�dÈ›�dÉ�ƒ e�dÊe› �dËen�dÄ›�dÅep�dÆ›�dÇeo�dÈ›�dÉ�	ƒ e�dÌeq�dÄ›�dÅes�dÆ›�dÇer�dÈ›�dÉ�ƒ �qøe teI¡ ud(¡jvdF�dÍ�Zwe�dÎ�dÏ› �ƒ e�dÐe› �ƒ e�dÏ› ƒ e�dÑe"ewƒd8›�ƒ e�dÒewd(  x¡ › �dÓewd(  d¡ › �ƒ e�dÔew�dÕ  y¡ �d– �dÖ›�dÉ�ƒ ew�d× d-  zew�dÕ d-k�d®¡Z{e�dØe{ y¡ �d– �dÙ›�dÉ�ƒ e�dÚe{ X¡ �dÛ›�dÜ�ƒ e�dÝƒ ew <�d£¡D ]‚\Z'Z|e|�d× d-  ze|�dÕ d-k�d®¡Z}e�dše'› �dÞe"e|ƒ�dÄ›�dÅe|�dÕ  y¡ �d– �dÖ›�dÇe} y¡ �d– �dÛ›�dÉ�	ƒ �qJe�dßƒ ew <�dà¡j~�dá�dâ�dã� v¡ Zew <�dà¡ /�dädL„ ¡jMe�då< ee�dæ �dçk ju�då�dè�dé�Ze _¡ D ]h\Z`Zae�dšea�dà �dê›�dëe!ea�dæ ƒ�dÄ›�dÅea�dì �d– �dÖ›�dÇea�då �dÛ›�dÉ�	ƒ �qDe�díe�dî›�dï�ƒ eD ]ÚZ€eZ�eZ‚�dðZƒew _¡ D ]v\Z`Z„exe„�dñ e€ �dòƒZ…e�e… Z†e„�dÕ �r(e†e„�d× d-  ne† Z‡ede�e‡ dƒZ�ede‚e�ƒZ‚edeƒe‚e� e‚ ƒZƒ�qäe�dše€�dó›�dôe��dõ›�döe�e �dÖ›�d÷eƒ�d– �dÖ›�dÉ�	ƒ �qÊ�døZˆewj‰eˆ�dèdN� e�dùeˆ› �ƒ e�dúƒ dS (û  z­
Random Forest + CLV combined strategy.
Walk-forward: train RF on prior seasons to predict away win probability,
then bet only when BOTH model pA >= threshold AND CLV > 5%.
é    N)ÚRandomForestClassifier)ÚCalibratedClassifierCVÚignoreg     @�@gš™™™™™©?g×£p=
×Ó?)gš™™™™™¹?ç      Ð?g      à?Ú1718Ú1819Ú1920Ú2021Ú2122Ú2223Ú2324Ú2425)iá  iâ  iã  iä  éå  éæ  éç  éè  )r   r   r   r   ZEPLZChampionshipz
League OnezLa LigaZSegundazSerie AzSerie BZ
Bundesligaz2.BundesligazLigue 1Z
EredivisiezBelgian Pro Leaguez	Super LigzGreek SLzScottish Prem)ZE0ZE1ZE2ZSP1ZSP2ZI1ZI2ZD1ZD2ZF1ZN1ZB1ZT1ZG1ZSC0c                 C   s:   d|  d|  d|  }d|  | d| | d| | fS )Né   © )ÚhÚdÚaZoverr   r   ú&E:\soccer\misc\archive\rf_clv_model.pyÚremove_margin%   s    r   zLoading features...z$E:/soccer/raw_api/match_features.csvÚdatec                 C   s   g | ]}d |v r|‘qS )Z_w5r   ©Ú.0Úcr   r   r   Ú
<listcomp>/   ó    r   c                 C   s   g | ]}d |v r|‘qS )Z_w10r   r   r   r   r   r   0   r   Zis_homer   )Ú
fixture_idr   ÚdivÚseasonÚ	home_teamÚ	away_teamÚ
home_goalsÚ
away_goalsc                 C   s   g | ]}d |› �‘qS ©Zh_r   r   r   r   r   r   6   r   r   c                 C   s   g | ]}d |› �‘qS ©Za_r   r   r   r   r   r   9   r   Úinner)ZonZhowr%   r$   Úaway_winz  ú,z matches with featureszLoading odds...)	r   r   r   r	   r
   r   r   r   Z2526zE:/soccer/league_data/Ú_z.csvz	utf-8-sig)ÚencodingÚB365AÚPSCH)ÚFTRr-   ÚB365HÚB365Dr.   ÚPSCDÚPSCA)ZsubsetZDateTZcoerce)ZdayfirstÚerrorsr    )Zignore_indexc                 C   s   t | d | d | d ƒS )Nr.   r2   r3   )r   )Úrr   r   r   Ú<lambda>T   r   r6   )Zaxis)ÚindexÚp_AÚ
PSC_fair_AÚedge_Az matches with oddszMerging features with odds...z%Y-%m-%dÚdate_strzman cityz
man unitedznott'm forestZ	tottenhamZ	newcastleZwolveszwest hamZ	leicesterZleedsZbrightonZbournemouthúsheffield unitedZburnleyúcrystal palacez
ath madridz
ath bilbaoZbetisZsociedadZ
valladolidZceltaZalavesZ	vallecanoZcadizZalmeriaú
las palmasZ	barcelonaúreal madridzparis sgZmonacoZlyonZ	marseillez
st etienneZ
strasbourgZrennesZreimsZlensZlilleZnantesZbordeauxZangersúclermont footZtroyesZtoulouseZlorientZajaccioZbrestZmontpellierZnicezle havreZdortmundz
m'gladbachúbayern munichZ
leverkusenú
rb leipzigzein frankfurtZ	stuttgartZ	wolfsburgZfreiburgzunion berlinzfc kolnZ
hoffenheimZaugsburgúwerder bremenZ
heidenheimZherthaZ	bielefeldZbochumz
schalke 04úgreuther furthúfortuna dusseldorfZ	darmstadtúholstein kielzst pauliÚinterZmilanZromaZnapoliZlazioÚjuventusÚatalantaZsassuoloZveronaÚbolognaÚudineseÚ	sampdoriaÚgenoaZsalernitanaÚtorinoZ
fiorentinaZlecceÚempoliÚspeziaZ	cremoneseÚcagliariÚveneziaÚ	frosinoneÚmonzaÚcomoÚparmaÚajaxÚ	feyenoordZpsvú
az alkmaarZtwenteZ
heerenveenú
fc utrechtZ	groningenÚvitesseúsparta rotterdamZwaalwijkZnecZcambuurúgo ahead eaglesZvolendamÚ	excelsiorzalmere cityzfort sittardú
pec zwolleZheraclesú	willem iiú	nac bredazclub bruggeZantwerpÚ
anderlechtZgenkZstandardZgentú	oh leuvenzst gilloiseúcercle bruggeZmechelenÚ	charleroiZkortrijkz
st truidenÚrwdmZeupenZ	beerschotÚseraingZwaaslandÚwesterloZdenderÚcelticÚrangersÚaberdeenÚheartsÚ	hibernianÚ
motherwellzst johnstoneÚdundeeÚ
livingstonúross countyÚ
kilmarnockz	st mirrenz
dundee utdÚgalatasarayÚ
fenerbahceÚbesiktasÚtrabzonsporZ
basaksehirúadana demirsporÚantalyasporÚ	sivassporÚkayserisporÚ
alanyasporÚ	konyasporÚ	kasimpasaZ	gaziantepÚ
ankaragucuÚ	hataysporÚgiresunsporZumraniyeÚistanbulsporÚ
pendiksporÚrizesporÚ
samsunsporú	bodrum fkÚeyupsporZ
olympiakosÚpanathinaikosZpaokZarisZaekZvolosúasteras tripolisÚionikosÚofiÚ	atromitosZgianninaÚlamiaÚ
levadiakosÚpanserraikosÚ	kallitheaZmainzZ	paderbornZnurnbergZhannoverZdresdenZ
regensburgZkaiserslauternúhamburger svZ	karlsruheZ	magdeburgZbraunschweigzerzgebirge aueZulmúpreussen munsterZ
elversbergZapollonÚrodaúde graafschapZ	eindhovenzden haagÚchievoZhamiltonz	la corunaZespanolz
sociedad búvillarreal búbarcelona bZmajadahondaÚguingampÚcaenz	west bromZqprzsheffield wedsZswanseaZstokeZhullZcardiffZcoventryZnorwichÚwatfordZ	blackburnúbristol cityÚmillwallÚmiddlesbroughÚ
sunderlandZprestonZlutonZplymouthZipswichZ	rotherhamZhuddersfieldZ
birminghamÚreadingÚ	blackpoolZwiganÚbarnsleyZderbyZpeterboroughÚ
portsmouthZboltonz
oxford utdZcharltonZexeterú	port valeZ
shrewsburyúfleetwood townzcambridge utdZ
cheltenhamZburtonZwycombeÚ	morecambeZ
accringtonZlincolnúmk donszracing santZzaragozaZoviedoZhuescaZferrolZ	cartagenaZmirandesZeibarZtenerifeZleganesÚelcheÚmalagaÚalbaceteZburgosÚponferradinaÚlugoÚibizazsp gijonZgranadaÚlevanteÚregginaÚperugiaÚspalÚ	beneventoÚbresciaÚascoliÚternanaÚcosenzaÚ
cittadellaÚpisaÚbariÚsudtirolÚpalermoÚ	catanzaroÚmodenaÚreggianaújuve stabiaÚmantovaÚcesenaÚ	carrarese(b  zmanchester cityzmanchester unitedznottingham forestztottenham hotspurznewcastle unitedzwolverhampton wandererszwest ham unitedzleicester cityzleeds unitedzbrighton & hove albionzbrighton hove albionzafc bournemouthr<   z
burnley fcr=   u   atlÃ©tico madridzatletico madridzathletic clubzathletic bilbaoz
real betiszreal sociedadzreal valladolidz
celta vigou   deportivo alavÃ©szdeportivo alaveszrayo vallecanou   cÃ¡dizu   almerÃ­ar>   zfc barcelonar?   zparis saint germainz	as monacozolympique lyonnaiszolympique de marseilleu   as saint-Ã©tiennezrc strasbourg alsacezstade rennais fczstade de reimszrc lensz
losc lillez	fc nanteszgirondins de bordeauxz
angers scor@   zestac troyesztoulouse fcz
fc lorientz
ac ajacciozstade brestois 29zmontpellier hsczogc nicezle havre aczborussia dortmundu   borussia mÃ¶nchengladbachzborussia monchengladbachrA   zbayer 04 leverkusenzbayer leverkusenrB   zeintracht frankfurtzvfb stuttgartzvfl wolfsburgzsc freiburgz1. fc union berlinu   1. fc kÃ¶lnz
1. fc kolnu   1. fc kÂ”lnztsg hoffenheimz1899 hoffenheimzfc augsburgzsv werder bremenrC   z1. fc heidenheimz1. fc heidenheim 1846zhertha berlinz
hertha bsczarminia bielefeldz
vfl bochumzfc schalke 04u   greuther fÃ¼rthrD   u   fortuna dÃ¼sseldorfrE   zdarmstadt 98zsv darmstadt 98rF   zfc st. paulirG   Zinternazionalezac milanzas romaz
ssc napolizss laziorH   rI   zus sassuolo calciozhellas veronazbologna fc 1909rJ   rK   zuc sampdoriarM   zus salernitana 1919rN   zacf fiorentinazus leccerO   rP   zus cremoneserQ   rR   rS   rT   rU   rV   rW   rX   zpsv eindhovenrY   Zazz	fc twentezsc heerenveenrZ   zfc groningenr[   r\   zrkc waalwijkznec nijmegenz
sc cambuurr]   zfc volendamr^   zalmere city fczfortuna sittardr_   zheracles almelor`   ra   zclub brugge kvzroyal antwerprb   zkrc genku   standard liÃ¨gezstandard liegezkaa gentrc   zunion saint-gilloisezunion st. gilloiserd   zkv mechelenre   zkv kortrijkzsint-truidense vvrf   zas eupenzbeerschot varg   zwaasland-beverenrh   z	fc denderri   rj   rk   zheart of midlothianrl   rm   rn   zst. johnstonero   rp   rq   rr   z
st. mirrenzdundee unitedrs   rt   u   fenerbahÃ§eru   u
   beÅŸiktaÅŸrv   zistanbul basaksehiru   istanbul baÅŸakÅŸehirrw   rx   ry   rz   r{   r|   r}   u   kasÄ±mpaÅŸazgaziantep fku   ankaragÃ¼cÃ¼r~   r   r€   u   Ã¼mraniyesporr�   r‚   rƒ   r„   r…   u	   eyÃ¼psporr†   zolympiacos piraeusr‡   zpaok thessaloniki fczaris thessalonikiszaek athens fcz	volos nfcrˆ   r‰   rŠ   r‹   zpas gianninarŒ   r�   rŽ   r�   zfsv mainz 05zmainz 05z1. fsv mainz 05zsc paderborn 07zfc nurnbergu   1. fc nÃ¼rnbergzhannover 96u   bayern mÃ¼nchenu   bayern mÂ�nchenzdynamo dresdenzjahn regensburgzfc kaiserslauternz1. fc kaiserslauternr�   zkarlsruher sczfc magdeburgz1. fc magdeburgzeintracht braunschweigzfc erzgebirge auezssv ulm 1846r‘   zfc elversbergzapollon smirniszolympiakos piraeusr’   r“   zfc eindhovenzado den haagr”   zhamilton academicalzdeportivo la corunaZespanyolzreal sociedad iizvillarreal iir–   zrayo majadahondazsaint etienner—   r˜   zwest bromwich albionzqueens park rangerszsheffield wednesdayzswansea cityz
stoke cityz	hull cityzcardiff cityzcoventry cityznorwich cityr™   zblackburn roversrš   r›   rœ   r�   zpreston north endz
luton townzplymouth argylezipswich townzrotherham unitedzhuddersfield townzbirmingham cityrž   rŸ   zwigan athleticr    zderby countyzpeterborough unitedr¡   zbolton wandererszoxford unitedzcharlton athleticzexeter cityr¢   zshrewsbury townr£   zcambridge unitedzcheltenham townzburton albionzwycombe wanderersr¤   zaccrington stzaccrington stanleyzlincoln cityr¥   zmilton keynes donszracing santanderzreal zaragozazreal oviedoz	sd huescazracing ferrolzfc cartagenau   cd mirandÃ©szcd mirandeszsd eibarzcd tenerifeu   cd leganÃ©sz
cd leganesr¦   u   mÃ¡lagar§   r¨   z	burgos cfr©   rª   r«   r•   zud las palmasu   sporting gijÃ³nzsporting gijonz
granada cfr¬   u   real sporting de gijÃ³nr­   r®   z	como 1907r¯   r°   r±   r²   r³   r´   rµ   r¶   r·   u	   sÃ¼dtirolr¸   r¹   rº   r»   rL   r¼   r½   r¾   r¿   rÀ   c                 C   sŠ   dd l }dd l}t| ƒ ¡  ¡ } | d| ¡ dd¡ d¡} | tv rJt|  S | 	dd| ¡ ¡ }| 	dd|¡ ¡ }|tv r~t| S t 
| | ¡S )	Nr   ZNFKDÚasciir   zK\b(fc|afc|sc|cf|cd|sd|ss|us|uc|rc|ac|as|og|rk|sv|vf[blr]|tsg|ssv|1\.|ssc)\bÚ z\s+ú )ÚunicodedataÚreÚstrÚlowerÚstripZ	normalizeÚencodeÚdecodeÚTEAM_MAPÚsubÚget)ÚsrÄ   rÅ   Ús2r   r   r   Únorm   s    rÐ   r"   Úh_normr#   Úa_normZHomeTeamZAwayTeam)r;   r    rÑ   rÒ   r-   r0   r1   r8   r9   r:   r/   ÚFTHGÚFTAGÚHTHGÚHTAG)r;   r    rÑ   rÒ   gš™™™™™é?c                 C   s:   t t| d  ¡ ƒtttd | jk d  ¡ ƒ ƒd d… S )NrÑ   r    é   )ÚlistÚsetÚuniqueÚodds_dfÚname©Úgr   r   r   r6   <  r   z  WARNING: Only éd   z.0fz"% matched. Unmatched team samples:c                 C   s   g | ]}|  d d¡ ¡ ‘qS )rÁ   Úreplace)rÉ   rÊ   )r   Útr   r   r   r   A  r   z    z: z matched (features + odds)c                 C   s   g | ]}d |› �‘qS r&   r   r   r   r   r   r   G  r   c                 C   s   g | ]}d |› �‘qS r'   r   r   r   r   r   r   H  r   Zdiff_é   z model featuresz
Walk-forward training...r!   iô  é2   z	  Season z: skipping (train=z, test=ú)i,  é   é   é*   éÿÿÿÿ)Zn_estimatorsZ	max_depthZmin_samples_leafZrandom_stateZn_jobsr×   Zisotonic)ZcvÚmethodÚmodel_pAr/   rÓ   rÂ   rÔ   rÕ   rÖ   ÚAé   é   )r   r!   ÚleagueZleague_coder"   r#   Zactual_resultr$   r%   Zht_homeZht_awayÚwonÚoddsZpinnacle_fairÚclv_pctrê   Úkelly_fractionZp_win_pinnaclec                 C   sL   t | ƒdkrdS dd„ |  ¡ D ƒ}t |ƒt|ƒt |ƒ d | d  ¡ d fS )Nr   )r   r   r   c                 S   s,   g | ]$\}}|d  dkr$|d d nd‘qS )r/   rë   r-   r   rè   r   )r   r+   r5   r   r   r   r   œ  r   zflat_roi.<locals>.<listcomp>rß   r)   )ÚlenÚiterrowsÚsumÚmean)ZdfZplsr   r   r   Úflat_roiš  s    r÷   z

  Season z (z
 matches):z     CLV only (>5%):           n=z>4z  WR=z5.1fz%  ROI=z+6.1fú%z    Model only (pA>=z
):      n=z     Combined (CLV + model):   n=)ZdropÚ
zF======================================================================z,COMBINED STRATEGY: CLV >5% + RF model pA >= z  Total OOS bets: z  Date range: z to z  Win rate: rï   z.1frð   z  Flat ROI: z+.2fz  Total flat P&L: z+.1fz unitsz
  By season:z  n=z
  By league (min 10 bets):rî   )rï   Úcount)rï   rö   )ÚnÚwrc                 C   s$   | d d   | d dkd¡ ¡ d S )Nrð   r   rï   rè   rß   )Úwhererö   rÝ   r   r   r   r6   ¼  r   Zroirû   é
   F)Z	ascendingz<22z n=rü   z
  Kelly compounding (from z,.0fz):g        rò   r   z.2fz
x Kelly:  z>12,.2fz  (z
x)  MaxDD=zE:\soccer\bets_rf_clv.csvz

Saved to zDone.)ŠÚ__doc__ZpandasZpdZnumpyZnpZsklearn.ensembler   Zsklearn.calibrationr   ÚwarningsÚfilterwarningsZSTARTZ
CLV_THRESHZ	PA_THRESHZKELLY_MULTSZseasons_mapZOOS_API_SEASONSZleague_namesr   ÚprintZread_csvZfeatZto_datetimeÚcolumnsZw5_colsZw10_colsZfeature_colsÚcopyZ	home_featZ	away_featÚmergeZmatchesZastypeÚintró   Zcsv_seasonsZall_oddsÚkeysÚcoderÎ   Úpathr   ZdropnaÚappendÚconcatrÛ   ÚzipZapplyZtHZtDZtAZSeriesr7   ZdtÚstrftimerË   rÐ   ZmergedZisinZ	unmatchedÚgroupbyZum_teamsÚitemsr    ZteamsZsafeZ
h_featuresZ
a_featuresZdiff_featuresZhcZacZdiff_colZX_colsZall_betsZtest_seasonZtrainÚtestÚvaluesZX_trainZy_trainZX_testZrfZcal_rfZfitZpredict_probaZpAZ
season_strZn_totalrõ   Zn_clvZn_modelZcombinedZclv_onlyZ
model_onlyZ
n_combinedrô   r+   r5   ÚbÚpÚmaxZkelly_frñ   rÍ   ZnotnaÚroundr÷   Zn_cZroi_cZwr_cZn_mZroi_mZwr_mZn_bZroi_bZwr_bZ	DataFrameZsort_valuesZreset_indexZbetsÚminrö   rý   Zflat_plZgrpÚfpZaggZlgZkmZbkZpeakZmax_ddÚrowÚfZstakeZplÚoutZto_csvr   r   r   r   Ú<module>   sð  
þö
ÿ
ÿ

€ Ä
 @
þ
ÿ*

 ,


ÿ
(
&&&&


î084((""
"Z
 ÿ$b$
J