Saturday, April 10, 2021

Aintree 2021: Grand-National Chase (G3) Handicapping

Aintree 2021: Grand National Chase Handicapping

Throwing caution to the wind, we will attempt to find live-longshots (20/1+) to finish in the money in the 40 runner Grand National Chase (G3) at Aintree 2021.

Taking our lead once again from Shannon-Fano Crowd Handicapping, we can see that the implied probabilities of the win-market prices allow us to divide the race entrants into five separate groups or sub-races (ABCDE). For example, we could decide to handicap each sub-race separately and leave ourselves five selections for punting.

Constraint Satisfaction Handicapping

Our approach is to use the recently posted Trader Probabilities Derivation And K-L Divergence (Part 3) method, which is basically solving a constraint satisfaction problem (CSP).

Model 20210410_17-15_Aintree_Grand-National Variables ! --- Public market information --- ! Trader win probabilities. ! Initial values set to market price implied probabilities. ! Lower-bound set to 1.25% - half the natural-odds implied ! probability (1/48). ! Upper-bound set to 100%. acapella_bourgeois = 1/36.00, >=0.00, <=1.00 alpha_des_obeaux = 1/95.00, >=0.00, <=1.00 ami_desbois = 1/140.00, >=0.00, <=1.00 anibale_fly = 1/32.00, >=0.00, <=1.00 any_second_now = 1/14.50, >=0.00, <=1.00 balko_des_flos = 1/130.00, >=0.00, <=1.00 ballyoptic = 1/110.00, >=0.00, <=1.00 blaklion = 1/100.00, >=0.00, <=1.00 bristol_de_mai = 1/38.00, >=0.00, <=1.00 burrows_saint = 1/13.00, >=0.00, <=1.00 cabaret_queen = 1/120.00, >=0.00, <=1.00 canelo = 1/60.00, >=0.00, <=1.00 chriss_dream = 1/80.00, >=0.00, <=1.00 class_conti = 1/65.00, >=0.00, <=1.00 cloth_cap = 1/6.40, >=0.00, <=1.00 definitly_red = 1/90.00, >=0.00, <=1.00 discorama = 1/22.00, >=0.00, <=1.00 double_shuffle = 1/150.00, >=0.00, <=1.00 fagan = 1/130.00, >=0.00, <=1.00 farclas = 1/23.00, >=0.00, <=1.00 give_me_a_copper = 1/95.00, >=0.00, <=1.00 hogans_height = 1/95.00, >=0.00, <=1.00 jett = 1/110.00, >=0.00, <=1.00 kauto_riko = 1/150.00, >=0.00, <=1.00 kimberlite_candy = 1/18.50, >=0.00, <=1.00 lake_view_lad = 1/75.00, >=0.00, <=1.00 lord_du_mesnil = 1/40.00, >=0.00, <=1.00 magic_of_light = 1/25.00, >=0.00, <=1.00 milan_native = 1/36.00, >=0.00, <=1.00 minellacelebration = 1/12.00, >=0.00, <=1.00 minella_times = 1/120.00, >=0.00, <=1.00 mister_malarky = 1/38.00, >=0.00, <=1.00 ok_corral = 1/100.00, >=0.00, <=1.00 potters_corner = 1/30.00, >=0.00, <=1.00 secret_reprieve = 1/20.00, >=0.00, <=1.00 shattered_love = 1/75.00, >=0.00, <=1.00 some_neck = 1/48.00, >=0.00, <=1.00 sub_lieutenant = 1/100.00, >=0.00, <=1.00 takingrisks = 1/42.00, >=0.00, <=1.00 talkischeap = 1/75.00, >=0.00, <=1.00 the_long_mile = 1/100.00, >=0.00, <=1.00 tout_est_permis = 1/140.00, >=0.00, <=1.00 vieux_lion_rouge = 1/100.00, >=0.00, <=1.00 yala_enki = 1/50.00, >=0.00, <=1.00 kld End Variables Equations ! Total trader win probabilities must sum to one. acapella_bourgeois + & alpha_des_obeaux + & ami_desbois + & anibale_fly + & any_second_now + & balko_des_flos + & ballyoptic + & blaklion + & bristol_de_mai + & burrows_saint + & cabaret_queen + & canelo + & chriss_dream + & class_conti + & cloth_cap + & definitly_red + & discorama + & double_shuffle + & fagan + & farclas + & give_me_a_copper + & hogans_height + & jett + & kauto_riko + & kimberlite_candy + & lake_view_lad + & lord_du_mesnil + & magic_of_light + & milan_native + & minellacelebration + & minella_times + & mister_malarky + & ok_corral + & potters_corner + & secret_reprieve + & shattered_love + & some_neck + & sub_lieutenant + & takingrisks + & talkischeap + & the_long_mile + & tout_est_permis + & vieux_lion_rouge + & yala_enki = 1.00 ! --- Private trader opinions --- ! Stable preference groups. (acapella_bourgeois + burrows_saint + cabaret_queen + class_conti + & cloth_cap + secret_reprieve + vieux_lion_rouge) > & (alpha_des_obeaux + ami_desbois + anibale_fly + any_second_now + & balko_des_flos + ballyoptic + blaklion + bristol_de_mai + canelo + & chriss_dream + definitly_red + discorama + double_shuffle + & fagan + farclas + give_me_a_copper + hogans_height + jett + & kauto_riko + kimberlite_candy + lake_view_lad + lord_du_mesnil + & magic_of_light + milan_native + minellacelebration + & minella_times + mister_malarky + ok_corral + potters_corner + & shattered_love + some_neck + sub_lieutenant + takingrisks + & talkischeap + the_long_mile + tout_est_permis + yala_enki) ! Class preference groups. (acapella_bourgeois + any_second_now + bristol_de_mai + & burrows_saint + chriss_dream + cloth_cap + definitly_red + & discorama + farclas + milan_native + minella_times + & mister_malarky + secret_reprieve + shattered_love) > & (alpha_des_obeaux + ami_desbois + anibale_fly + balko_des_flos + & ballyoptic + blaklion + cabaret_queen + canelo + class_conti + & double_shuffle + fagan + give_me_a_copper + hogans_height + & jett + kauto_riko + kimberlite_candy + lake_view_lad + & lord_du_mesnil + magic_of_light + minellacelebration + & ok_corral + potters_corner + some_neck + sub_lieutenant + & takingrisks + talkischeap + the_long_mile + tout_est_permis + & vieux_lion_rouge + yala_enki) ! Age preference groups. (any_second_now + cabaret_queen + chriss_dream + class_conti + & cloth_cap + kimberlite_candy + talkischeap) > & (acapella_bourgeois + alpha_des_obeaux + ami_desbois + & anibale_fly + balko_des_flos + ballyoptic + blaklion + & bristol_de_mai + burrows_saint + canelo + definitly_red + & discorama + double_shuffle + fagan + farclas + give_me_a_copper + & hogans_height + jett + kauto_riko + lake_view_lad + & lord_du_mesnil + magic_of_light + milan_native + & minellacelebration + minella_times + mister_malarky + ok_corral + & potters_corner + secret_reprieve + shattered_love + some_neck + & sub_lieutenant + takingrisks + the_long_mile + tout_est_permis + & vieux_lion_rouge + yala_enki) ! Saddle-weight preference groups. (acapella_bourgeois + alpha_des_obeaux + anibale_fly + & any_second_now + balko_des_flos + burrows_saint + & kimberlite_candy + lake_view_lad + magic_of_light + & mister_malarky + ok_corral + talkischeap + & tout_est_permis) > & (ami_desbois + ballyoptic + blaklion + bristol_de_mai + & cabaret_queen + canelo + chriss_dream + class_conti + & cloth_cap + definitly_red + discorama + double_shuffle + fagan + & farclas + give_me_a_copper + hogans_height + jett + kauto_riko + & lord_du_mesnil + milan_native + minellacelebration + & minella_times + potters_corner + secret_reprieve + shattered_love + & some_neck + sub_lieutenant + takingrisks + the_long_mile + & vieux_lion_rouge + yala_enki) ! --- Combination of public and private information --- ! Minimize K-LD. kld=(1/36.00)*log(((1/36.00)/acapella_bourgeois)) + & (1/95.00)*log(((1/95.00)/alpha_des_obeaux)) + & (1/140.00)*log(((1/140.00)/ami_desbois)) + & (1/32.00)*log(((1/32.00)/anibale_fly)) + & (1/14.50)*log(((1/14.50)/any_second_now)) + & (1/130.00)*log(((1/130.00)/balko_des_flos)) + & (1/110.00)*log(((1/110.00)/ballyoptic)) + & (1/100.00)*log(((1/100.00)/blaklion)) + & (1/38.00)*log(((1/38.00)/bristol_de_mai)) + & (1/13.00)*log(((1/13.00)/burrows_saint)) + & (1/120.00)*log(((1/120.00)/cabaret_queen)) + & (1/60.00)*log(((1/60.00)/canelo)) + & (1/80.00)*log(((1/80.00)/chriss_dream)) + & (1/65.00)*log(((1/65.00)/class_conti)) + & (1/6.40)*log(((1/6.40)/cloth_cap)) + & (1/90.00)*log(((1/90.00)/definitly_red)) + & (1/22.00)*log(((1/22.00)/discorama)) + & (1/150.00)*log(((1/150.00)/double_shuffle)) + & (1/130.00)*log(((1/130.00)/fagan)) + & (1/23.00)*log(((1/23.00)/farclas)) + & (1/95.00)*log(((1/95.00)/give_me_a_copper)) + & (1/95.00)*log(((1/95.00)/hogans_height)) + & (1/110.00)*log(((1/110.00)/jett)) + & (1/150.00)*log(((1/150.00)/kauto_riko)) + & (1/18.50)*log(((1/18.50)/kimberlite_candy)) + & (1/75.00)*log(((1/75.00)/lake_view_lad)) + & (1/40.00)*log(((1/40.00)/lord_du_mesnil)) + & (1/25.00)*log(((1/25.00)/magic_of_light)) + & (1/36.00)*log(((1/36.00)/milan_native)) + & (1/12.00)*log(((1/12.00)/minellacelebration)) + & (1/120.00)*log(((1/120.00)/minella_times)) + & (1/38.00)*log(((1/38.00)/mister_malarky)) + & (1/100.00)*log(((1/100.00)/ok_corral)) + & (1/30.00)*log(((1/30.00)/potters_corner)) + & (1/20.00)*log(((1/20.00)/secret_reprieve)) + & (1/75.00)*log(((1/75.00)/shattered_love)) + & (1/48.00)*log(((1/48.00)/some_neck)) + & (1/100.00)*log(((1/100.00)/sub_lieutenant)) + & (1/42.00)*log(((1/42.00)/takingrisks)) + & (1/75.00)*log(((1/75.00)/talkischeap)) + & (1/100.00)*log(((1/100.00)/the_long_mile)) + & (1/140.00)*log(((1/140.00)/tout_est_permis)) + & (1/100.00)*log(((1/100.00)/vieux_lion_rouge)) + & (1/50.00)*log(((1/50.00)/yala_enki)) End Equations End Model
{ "acapella_bourgeois" : [1.0344483718E-01], "alpha_des_obeaux" : [1.1092490127E-02], "ami_desbois" : [6.4013255253E-03], "anibale_fly" : [1.1092489557E-02], "any_second_now" : [1.1905042800E-01], "balko_des_flos" : [1.1092490142E-02], "ballyoptic" : [6.4013255253E-03], "blaklion" : [6.4013255253E-03], "bristol_de_mai" : [6.9307674653E-03], "burrows_saint" : [1.0344530933E-01], "cabaret_queen" : [5.6574957561E-02], "canelo" : [6.4013255292E-03], "chriss_dream" : [1.3449984823E-02], "class_conti" : [5.6574614025E-02], "cloth_cap" : [1.6988521027E-01], "definitly_red" : [6.9307668564E-03], "discorama" : [6.9307681009E-03], "double_shuffle" : [6.4013255253E-03], "fagan" : [6.4013255253E-03], "farclas" : [6.9307680439E-03], "give_me_a_copper" : [6.4013255256E-03], "hogans_height" : [6.4013255256E-03], "jett" : [6.4013255253E-03], "kauto_riko" : [6.4013255253E-03], "kimberlite_candy" : [4.9381265450E-02], "lake_view_lad" : [1.1092490049E-02], "lord_du_mesnil" : [6.4013255341E-03], "magic_of_light" : [1.1092489303E-02], "milan_native" : [6.9307675202E-03], "minellacelebration" : [6.4013255548E-03], "minella_times" : [6.9307668115E-03], "mister_malarky" : [1.2784649318E-02], "ok_corral" : [1.1092490142E-02], "potters_corner" : [6.4013255385E-03], "secret_reprieve" : [1.3221176794E-02], "shattered_love" : [6.9307669456E-03], "some_neck" : [6.4013255317E-03], "sub_lieutenant" : [6.4013255253E-03], "takingrisks" : [6.4013255334E-03], "talkischeap" : [4.9381264855E-02], "the_long_mile" : [6.4013255253E-03], "tout_est_permis" : [1.1092490143E-02], "vieux_lion_rouge" : [1.1419641645E-02], "yala_enki" : [6.4013255312E-03], }

On this occasion, there are four standout horses (apart from the top three in the betting), which have an edge on the market and are worth each-way consideration:


      a. acapella_bourgeois:  36.00
      b. cabaret_queen:      120.00
      c. class_conti:         65.00
      d. talkischeap:         75.00
   

We have completed our task without having to generate 40 win probabilities but simply by identifying preference groups within categories that we ourselves have chosen!

One notable exception to our process is secret_reprieve: 20.00 who is the least-exposed runner in the race but with both high class and fpr ratings - great potential but will need a lot of luck in running to be competitivve!

Note: We are not saying that those horses we have eliminated are not going to win - simply that they did not meet our criteria for live longshots to run in the money. Also, whether we succeed or fail in a single race is not the measure of the two processes we present here but their long-term peformance against the market!