{"meta":{"v":2,"slug":"cfl","name":"CFL","sport":"Canadian football","kind":"match","season":"2026","season_key":"2026","generated_at":"2026-11-12T00:15:09+00:00","crown":"Grey Cup","round_name":"Week","home_word":"Home field","draws":false,"versus":false,"participant":"team","group_label":"Division","official_table":false,"table_note":"Division tables from results: two points a win, one a tie. The crossover can send a fourth-placed team to the other division's playoffs.","table_columns":[],"points":"nrl","periods":4,"period_minutes":15,"clock_up":false,"live":true,"outdoor":true},"teams":{"BC":{"name":"BC Lions","short":"Lions","abbr":"BC","logo":"/assets/teams/cfl/BC.svg","group":"West Division"},"CGY":{"name":"Calgary Stampeders","short":"Stampeders","abbr":"CGY","logo":"/assets/teams/cfl/CGY.svg","group":"West Division"},"EDM":{"name":"Edmonton Elks","short":"Elks","abbr":"EDM","logo":"/assets/teams/cfl/EDM.svg","group":"West Division"},"HAM":{"name":"Hamilton Tiger-Cats","short":"Tiger-Cats","abbr":"HAM","logo":"/assets/teams/cfl/HAM.svg","group":"East Division"},"MTL":{"name":"Montreal Alouettes","short":"Alouettes","abbr":"MTL","logo":"/assets/teams/cfl/MTL.webp","group":"East Division"},"OTT":{"name":"Ottawa REDBLACKS","short":"REDBLACKS","abbr":"OTT","logo":"/assets/teams/cfl/OTT.svg","group":"East Division"},"SSK":{"name":"Saskatchewan Roughriders","short":"Roughriders","abbr":"SSK","logo":"/assets/teams/cfl/SSK.svg","group":"West Division"},"TOR":{"name":"Toronto Argonauts","short":"Argonauts","abbr":"TOR","logo":"/assets/teams/cfl/TOR.svg","group":"East Division"},"WPG":{"name":"Winnipeg Blue Bombers","short":"Blue Bombers","abbr":"WPG","logo":"/assets/teams/cfl/WPG.svg","group":"West Division"}},"slate":[{"id":"cfl6676","date":"2026-11-15","home":"EDM","away":"MTL","time":"2026-11-15T23:00:00Z","p":[0.4433,0.0,0.5567],"elo":[1614,1653],"mkts":{"pm":{"h":0.395,"a":0.605,"url":"https://polymarket.com/event/cfl-mtl-edm-2026-11-15","vol":106},"ks":{"h":0.3858,"a":0.6142,"url":"https://kalshi.com/markets/kxcflgame"},"bk":{"h":0.3899,"a":0.6101,"books":3},"at":"2026-11-12T00:15+00:00","avg":{"h":0.3902,"d":0.0,"a":0.6098,"n":3}},"mh":{"bk":{"t":"2026-11-11T01:37:00.726Z","days":[],"h":0.3899,"d":0.0,"a":0.6101,"n":3},"pm":{"t":"2026-11-11T01:01:37Z","days":[],"h":0.395,"d":0.0,"a":0.605},"ks":{"t":"2026-11-11T01:00:00Z","days":[],"h":0.38,"d":0.0,"a":0.62}},"pre":[["2026-11-08T12:18Z",0.4433,0.0,0.5567],["2026-11-09T00:15Z",0.4433,0.0,0.5567],["2026-11-09T12:14Z",0.4433,0.0,0.5567],["2026-11-10T00:14Z",0.4433,0.0,0.5567],["2026-11-10T12:14Z",0.4433,0.0,0.5567],["2026-11-11T00:15Z",0.4433,0.0,0.5567],["2026-11-11T12:14Z",0.4433,0.0,0.5567],["2026-11-12T00:15Z",0.4433,0.0,0.5567]],"wpm":{"kind":"normal","mu":-2.007,"sigma":14.083},"neutral":true,"playoff":true,"stage":"Grey Cup"}],"live":[],"recent":[{"id":"cfl6675","date":"2026-11-07","home":"EDM","away":"BC","time":"2026-11-07T23:30:00Z","hs":28,"as":16,"done":true,"p":[0.6106,0.0,0.3894],"elo":[1592,1559],"mh":{"bk":{"t":"2026-11-07T23:17:35.547Z","days":[["2026-11-05T12:00:00Z",0.509,0.0,0.491],["2026-11-06T12:00:00Z",0.4627,0.0,0.5373],["2026-11-07T12:00:00Z",0.4557,0.0,0.5443]],"h":0.491,"d":0.0,"a":0.509,"n":1},"ks":{"t":"2026-11-07T23:28:00Z","days":[["2026-11-03T12:00:00Z",0.515,0.0,0.485],["2026-11-04T12:00:00Z",0.5,0.0,0.5],["2026-11-05T12:00:00Z",0.5,0.0,0.5],["2026-11-06T12:00:00Z",0.455,0.0,0.545],["2026-11-07T12:00:00Z",0.455,0.0,0.545]],"h":0.505,"d":0.0,"a":0.495}},"wx":{"temp":5.0,"rain":0.0,"wind":4.6,"gust":12.1,"src":"forecast"},"playoff":true,"stage":"Division final"},{"id":"cfl6674","date":"2026-11-07","home":"MTL","away":"WPG","time":"2026-11-07T20:00:00Z","hs":33,"as":23,"done":true,"p":[0.6768,0.0,0.3232],"elo":[1637,1554],"mh":{"bk":{"t":"2026-11-07T19:58:05.131Z","days":[["2026-11-05T12:00:00Z",0.799,0.0,0.201],["2026-11-06T12:00:00Z",0.7893,0.0,0.2107],["2026-11-07T12:00:00Z",0.7851,0.0,0.2149]],"h":0.8055,"d":0.0,"a":0.1945,"n":1},"ks":{"t":"2026-11-07T19:59:00Z","days":[["2026-11-03T12:00:00Z",0.78,0.0,0.22],["2026-11-04T12:00:00Z",0.76,0.0,0.24],["2026-11-05T12:00:00Z",0.815,0.0,0.185],["2026-11-06T12:00:00Z",0.795,0.0,0.205],["2026-11-07T12:00:00Z",0.795,0.0,0.205]],"h":0.815,"d":0.0,"a":0.185}},"wx":{"temp":5.5,"rain":0.0,"wind":15.8,"gust":32.1,"src":"forecast"},"playoff":true,"stage":"Division final"}],"power":[{"team":"MTL","rating":1653.1,"start":1530.2,"season_change":122.8,"month_change":35.0,"played":18,"wins":14,"losses":4,"draws":0,"gf":624,"ga":476,"form":"WWWLW","rank":1},{"team":"EDM","rating":1613.5,"start":1469.6,"season_change":143.9,"month_change":23.5,"played":18,"wins":13,"losses":5,"draws":0,"gf":541,"ga":437,"form":"LWWWL","rank":2},{"team":"CGY","rating":1558.0,"start":1524.9,"season_change":33.1,"month_change":20.3,"played":18,"wins":9,"losses":9,"draws":0,"gf":632,"ga":587,"form":"WWWLW","rank":3},{"team":"BC","rating":1538.3,"start":1568.5,"season_change":-30.3,"month_change":-93.3,"played":18,"wins":10,"losses":8,"draws":0,"gf":516,"ga":484,"form":"WWWLL","rank":4},{"team":"WPG","rating":1537.7,"start":1528.8,"season_change":8.9,"month_change":60.0,"played":18,"wins":9,"losses":9,"draws":0,"gf":477,"ga":492,"form":"LLWLW","rank":5},{"team":"SSK","rating":1509.9,"start":1557.6,"season_change":-47.7,"month_change":17.7,"played":18,"wins":10,"losses":8,"draws":0,"gf":486,"ga":473,"form":"LLLWW","rank":6},{"team":"TOR","rating":1476.3,"start":1436.5,"season_change":39.7,"month_change":-78.1,"played":18,"wins":9,"losses":9,"draws":0,"gf":517,"ga":528,"form":"WWLLL","rank":7},{"team":"HAM","rating":1404.0,"start":1503.5,"season_change":-99.5,"month_change":-6.2,"played":18,"wins":6,"losses":12,"draws":0,"gf":443,"ga":523,"form":"LLWLW","rank":8},{"team":"OTT","rating":1209.3,"start":1380.2,"season_change":-170.9,"month_change":-0.8,"played":18,"wins":1,"losses":17,"draws":0,"gf":437,"ga":673,"form":"LLLWL","rank":9}],"table":[{"team":"MTL","played":18,"wins":14,"draws":0,"losses":4,"otl":0,"gf":624,"ga":476,"gd":148,"points":28.0,"form":"WWWLW","pct":0.7777777777777778,"ratio":131.09,"group":"East Division"},{"team":"EDM","played":18,"wins":13,"draws":0,"losses":5,"otl":0,"gf":541,"ga":437,"gd":104,"points":26.0,"form":"LWWWL","pct":0.7222222222222222,"ratio":123.8,"group":"West Division"},{"team":"BC","played":18,"wins":10,"draws":0,"losses":8,"otl":0,"gf":516,"ga":484,"gd":32,"points":20.0,"form":"WWWLL","pct":0.5555555555555556,"ratio":106.61,"group":"West Division"},{"team":"SSK","played":18,"wins":10,"draws":0,"losses":8,"otl":0,"gf":486,"ga":473,"gd":13,"points":20.0,"form":"LLLWW","pct":0.5555555555555556,"ratio":102.75,"group":"West Division"},{"team":"CGY","played":18,"wins":9,"draws":0,"losses":9,"otl":0,"gf":632,"ga":587,"gd":45,"points":18.0,"form":"WWWLW","pct":0.5,"ratio":107.67,"group":"West Division"},{"team":"TOR","played":18,"wins":9,"draws":0,"losses":9,"otl":0,"gf":517,"ga":528,"gd":-11,"points":18.0,"form":"WWLLL","pct":0.5,"ratio":97.92,"group":"East Division"},{"team":"WPG","played":18,"wins":9,"draws":0,"losses":9,"otl":0,"gf":477,"ga":492,"gd":-15,"points":18.0,"form":"LLWLW","pct":0.5,"ratio":96.95,"group":"West Division"},{"team":"HAM","played":18,"wins":6,"draws":0,"losses":12,"otl":0,"gf":443,"ga":523,"gd":-80,"points":12.0,"form":"LLWLW","pct":0.3333333333333333,"ratio":84.7,"group":"East Division"},{"team":"OTT","played":18,"wins":1,"draws":0,"losses":17,"otl":0,"gf":437,"ga":673,"gd":-236,"points":2.0,"form":"LLLWL","pct":0.05555555555555555,"ratio":64.93,"group":"East Division"}],"odds":{"columns":[["playoffs","Make playoffs"],["first","Win division"],["final","Grey Cup"],["champion","Win Grey Cup"]],"rows":[{"team":"MTL","points":28.0,"wins":14.0,"draws":0.0,"gd":148.0,"p_first":1.0,"positions":[1.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0],"p_playoffs":1.0,"p_final":1.0,"p_champion":0.5623},{"team":"EDM","points":26.0,"wins":13.0,"draws":0.0,"gd":104.0,"p_first":1.0,"positions":[0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0],"p_playoffs":1.0,"p_final":1.0,"p_champion":0.4377},{"team":"BC","points":20.0,"wins":10.0,"draws":0.0,"gd":32.0,"p_first":0.0,"positions":[0.0,0.0,0.5016,0.4984,0.0,0.0,0.0,0.0,0.0],"p_playoffs":1.0,"p_final":0.0,"p_champion":0.0},{"team":"SSK","points":20.0,"wins":10.0,"draws":0.0,"gd":13.0,"p_first":0.0,"positions":[0.0,0.0,0.4984,0.5016,0.0,0.0,0.0,0.0,0.0],"p_playoffs":1.0,"p_final":0.0,"p_champion":0.0},{"team":"CGY","points":18.0,"wins":9.0,"draws":0.0,"gd":45.0,"p_first":0.0,"positions":[0.0,0.0,0.0,0.0,0.0,0.3354,0.6646,0.0,0.0],"p_playoffs":0.0,"p_final":0.0,"p_champion":0.0},{"team":"TOR","points":18.0,"wins":9.0,"draws":0.0,"gd":-11.0,"p_first":0.0,"positions":[0.0,0.0,0.0,0.0,0.3449,0.3197,0.3354,0.0,0.0],"p_playoffs":1.0,"p_final":0.0,"p_champion":0.0},{"team":"WPG","points":18.0,"wins":9.0,"draws":0.0,"gd":-15.0,"p_first":0.0,"positions":[0.0,0.0,0.0,0.0,0.6551,0.3449,0.0,0.0,0.0],"p_playoffs":1.0,"p_final":0.0,"p_champion":0.0},{"team":"HAM","points":12.0,"wins":6.0,"draws":0.0,"gd":-80.0,"p_first":0.0,"positions":[0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0],"p_playoffs":0.0,"p_final":0.0,"p_champion":0.0},{"team":"OTT","points":2.0,"wins":1.0,"draws":0.0,"gd":-236.0,"p_first":0.0,"positions":[0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0],"p_playoffs":0.0,"p_final":0.0,"p_champion":0.0}],"sims":10000,"noise":45,"points":"nrl"},"outlook":null,"track":{"markets":{"sources":[{"key":"bk","name":"Bookmakers (Pinnacle, DraftKings, bet365)","n":83,"since":"2026-06-04","model":{"n":83,"log_loss":0.6089993929646518,"brier":0.2122896287695169,"accuracy":0.6265060240963856},"market":{"n":83,"log_loss":0.5734544488503105,"brier":0.19393311192771087,"accuracy":0.7108433734939759}},{"key":"pm","name":"Polymarket","n":81,"since":"2026-06-04","model":{"n":81,"log_loss":0.6131260839102713,"brier":0.21436949956827456,"accuracy":0.6172839506172839},"market":{"n":81,"log_loss":0.5759195195815536,"brier":0.19552283950617286,"accuracy":0.691358024691358}},{"key":"ks","name":"Kalshi","n":80,"since":"2026-06-04","model":{"n":80,"log_loss":0.5941441961748334,"brier":0.2051644386477288,"accuracy":0.6625},"market":{"n":80,"log_loss":0.5750834908423731,"brier":0.19534687500000003,"accuracy":0.7}}],"collecting":[]},"adjustment":null,"preseason":null,"returning":null,"weather":{"coverage":{"games":650,"with":503,"sources":{"station":433,"reanalysis":68,"forecast":2}},"weight":0.0,"kept":false,"holdout_with":{"n":257,"log_loss":0.6599136430308045,"brier":0.23275769647541636,"accuracy":0.5797665369649806},"holdout_without":{"n":257,"log_loss":0.6599136430308045,"brier":0.23275769647541636,"accuracy":0.5797665369649806},"rough_n":11,"rough_with":{"n":11,"log_loss":0.5819442531441819,"brier":0.1995085388088305,"accuracy":0.6363636363636364},"rough_without":{"n":11,"log_loss":0.5819442531441819,"brier":0.1995085388088305,"accuracy":0.6363636363636364},"thresholds":{"wind":25,"rain":3.0,"cold":-5}},"params":{"k":50.0,"home":45,"carry":0.65,"draw":0.0,"mov":true,"new":0.0,"playoff_k":1.0,"wx":0.0,"adj":0.0,"pre":0.0,"ret":0.0},"tuned":{"params":{"k":50.0,"home":45,"carry":0.65,"draw":0.0,"mov":true,"new":0.0,"playoff_k":1.0,"wx":0.0,"adj":0.0},"tuned_at":"2026-09-24T01:59:11+00:00","tune_seasons":["2018","2019","2021","2022","2023"],"holdout_seasons":["2024","2025","2026"],"note":"Fit on the tuning seasons only. Re-fit with --retune."},"holdout":["2024","2025","2026"],"tune":["2018","2019","2021","2022","2023"],"per_season":[{"season":"2018","key":"2018","holdout":false,"tuning":true,"model":{"n":81,"log_loss":0.6388950094137711,"brier":0.22279576126839631,"accuracy":0.6666666666666666},"base":{"n":81,"log_loss":0.6777246442022383,"brier":0.2423084492166545,"accuracy":0.6049382716049383},"form":{"n":81,"log_loss":0.6579753509615669,"brier":0.23265800567661987,"accuracy":0.6049382716049383},"market":{"n":0}},{"season":"2019","key":"2019","holdout":false,"tuning":true,"model":{"n":81,"log_loss":0.547923136184902,"brier":0.18281750274405106,"accuracy":0.7654320987654321},"base":{"n":81,"log_loss":0.675381109851028,"brier":0.24114018803134302,"accuracy":0.6172839506172839},"form":{"n":81,"log_loss":0.5738340526603571,"brier":0.19553952089084536,"accuracy":0.691358024691358},"market":{"n":0}},{"season":"2021","key":"2021","holdout":false,"tuning":true,"model":{"n":63,"log_loss":0.6765159515060069,"brier":0.24116236207355177,"accuracy":0.6190476190476191},"base":{"n":63,"log_loss":0.6961381283903182,"brier":0.2514876442441017,"accuracy":0.5079365079365079},"form":{"n":63,"log_loss":0.6850909382865211,"brier":0.24406955076428707,"accuracy":0.6190476190476191},"market":{"n":0}},{"season":"2022","key":"2022","holdout":false,"tuning":true,"model":{"n":81,"log_loss":0.6356739596977493,"brier":0.22031941922836848,"accuracy":0.7160493827160493},"base":{"n":81,"log_loss":0.7058470564167599,"brier":0.25632758344039225,"accuracy":0.4567901234567901},"form":{"n":81,"log_loss":0.6466785125257538,"brier":0.22643600741363662,"accuracy":0.654320987654321},"market":{"n":0}},{"season":"2023","key":"2023","holdout":false,"tuning":true,"model":{"n":86,"log_loss":0.57924091988559,"brier":0.19775599778547487,"accuracy":0.7325581395348837},"base":{"n":86,"log_loss":0.6898669013712958,"brier":0.24836145167171364,"accuracy":0.5465116279069767},"form":{"n":86,"log_loss":0.5980836033217263,"brier":0.20558798799719002,"accuracy":0.6976744186046512},"market":{"n":0}},{"season":"2024","key":"2024","holdout":true,"tuning":false,"model":{"n":86,"log_loss":0.6726779504537286,"brier":0.23457963768437923,"accuracy":0.5348837209302325},"base":{"n":86,"log_loss":0.6766232072470152,"brier":0.23594546404309294,"accuracy":0.5930232558139535},"form":{"n":86,"log_loss":0.7018798592394488,"brier":0.24832204570936273,"accuracy":0.5465116279069767},"market":{"n":0}},{"season":"2025","key":"2025","holdout":true,"tuning":false,"model":{"n":86,"log_loss":0.6973602535541997,"brier":0.251204034114849,"accuracy":0.5697674418604651},"base":{"n":86,"log_loss":0.6876596190172488,"brier":0.24726111264833897,"accuracy":0.5465116279069767},"form":{"n":86,"log_loss":0.7184717646052671,"brier":0.26059913811661956,"accuracy":0.5465116279069767},"market":{"n":0}},{"season":"2026","key":"2026","holdout":true,"tuning":false,"model":{"n":85,"log_loss":0.609112008402764,"brier":0.21225096728762752,"accuracy":0.6352941176470588},"base":{"n":85,"log_loss":0.678662057942722,"brier":0.24277575369077917,"accuracy":0.6},"form":{"n":85,"log_loss":0.6181570552521326,"brier":0.2164788540975069,"accuracy":0.6352941176470588},"market":{"n":0}}],"holdout_scores":{"model":{"n":257,"log_loss":0.6599136430308045,"brier":0.23275769647541636,"accuracy":0.5797665369649806},"base":{"n":257,"log_loss":0.6809906536336927,"brier":0.24199106871276022,"accuracy":0.5797665369649806},"form":{"n":257,"log_loss":0.6797415927901834,"brier":0.24189853854989324,"accuracy":0.5758754863813229},"market":{"n":0}},"market_pair":null,"calibration":[{"label":"0–10%","n":2,"predicted":0.0739623542878004,"actual":0.0},{"label":"10–20%","n":17,"predicted":0.17213547576103655,"actual":0.29411764705882354},{"label":"20–30%","n":49,"predicted":0.2567905550970814,"actual":0.30612244897959184},{"label":"30–40%","n":76,"predicted":0.34944950760619964,"actual":0.3815789473684211},{"label":"40–50%","n":113,"predicted":0.4521452365692552,"actual":0.504424778761062},{"label":"50–60%","n":113,"predicted":0.5478547634307447,"actual":0.48672566371681414},{"label":"60–70%","n":76,"predicted":0.6505504923938003,"actual":0.618421052631579},{"label":"70–80%","n":49,"predicted":0.7432094449029188,"actual":0.673469387755102},{"label":"80–90%","n":17,"predicted":0.8278645242389632,"actual":0.7058823529411765},{"label":"90–100%","n":2,"predicted":0.9260376457121996,"actual":1.0}],"form_fit":{"scale":450,"home":50,"draw":0},"base_rates":[0.5473145780051151,0.0,0.45268542199488493],"three_way":false,"titles":{"seasons":[{"season":"2024","champion":"TOR","p_pre":0.197,"p_mid":0.1407,"favourite":"WPG","p_favourite":0.352,"field":9},{"season":"2025","champion":"SSK","p_pre":0.055,"p_mid":0.3483,"favourite":"TOR","p_favourite":0.3142,"field":9}],"n":2,"log_loss_pre":2.2625,"log_loss_base":2.1972,"fav_won":0,"fav_expected":0.67}},"about":["The playoffs are simulated the league's way: three teams from each division, the crossover when a fourth-placed team has more points than the other division's third, division semi-finals and finals at the higher seed, and the Grey Cup on neutral ground.","CFL.ca's pages go back to 2016 (there was no 2020 season), and they list older playoff games without scores, so those few games are left out of the ratings."],"glossary":[],"notes":["Live scores come from CFL.ca's scoreboard; the in-game chance moves with the score and the clock, not with field position.","Quarterbacks and injuries are not in the model."],"sources":[["CFL.ca","https://www.cfl.ca/schedule/","Every game since 2016 (scores, weeks, venues) from the league's schedule pages"],["CFL.ca scoreboard","https://www.cfl.ca/schedule/","Live scores, from the scoreboard feed behind CFL.ca"],["Meteostat and Open-Meteo","https://meteostat.net/","Weather at the stadium"]],"downloads":[{"file":"/data/cfl/csv/games.csv","label":"Every 2026 game with our pre-game probabilities","rows":86},{"file":"/data/cfl/csv/ratings.csv","label":"Current ratings","rows":9},{"file":"/data/cfl/csv/standings.csv","label":"The table","rows":9},{"file":"/data/cfl/csv/season_odds.csv","label":"Season simulation","rows":9},{"file":"/data/cfl/csv/track_record.csv","label":"Track record by season","rows":8},{"file":"/data/cfl/csv/all_games.csv","label":"Every game in the model's history, with the pre-game probability","rows":811}],"parts":{"explorer":1}}