{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"pygments_lexer":"ipython3","nbconvert_exporter":"python","version":"3.6.4","file_extension":".py","codemirror_mode":{"name":"ipython","version":3},"name":"python","mimetype":"text/x-python"}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"markdown","source":"**Key Ideas**\n\n1. Combine multiple models as per Wisdom of Crowds, weighting uses the Boltzmann distribution from statistical mechanics;\n\n2. Clip probabilities to the range 0.1 to 0.99 to avoid the heavy log loss penalties for being confident but wrong. This is derived from the [March Machine Learning Mania](https://www.kaggle.com/competitions/mens-march-mania-2022) competitions.\n\n3. Allow for potentially different mean probabilities in training data, test data and component models by introducing scaling factors. See calculations of means in the notebook [How to kill all your efforts?](https://www.kaggle.com/code/alexryzhkov/how-to-kill-all-your-efforts) by @alexryzhkov.\n\n4. Use separate scaling parameters (FA & FB) for teams A & B to cover possible systematic differences between the two sides, as per the discussion [Team A is consistently better than Team B](https://www.kaggle.com/competitions/tabular-playground-series-oct-2022/discussion/357339) started by @nigelhenry.\n\n5. We observe that fitting to the training data suggests values of around 1.0 for FA & FB, whereas optimising the public LB suggests values around 1.08.\n\n6. The plan is to make two submissions:\n\n(a) One optimised to public LB with a large contribution from the 'best' component model, hence a high value of b, and FA and FB around 1.08;\n\n(b) The other aimed to match training data with the equivalent of four contributing models, hence with a smaller b, and FA and FB around 1.00.","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","_kg_hide-output":true}},{"cell_type":"code","source":"# This Python 3 environment comes with many helpful analytics libraries installed\n# It is defined by the kaggle/python Docker image: https://github.com/kaggle/docker-python\n# For example, here's several helpful packages to load\n\nimport numpy as np # linear algebra\nimport pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)\n\n# Input data files are available in the read-only \"../input/\" directory\n# For example, running this (by clicking run or pressing Shift+Enter) will list all files under the input directory\n\nimport os\nfor dirname, _, filenames in os.walk('/kaggle/input'):\n    for filename in filenames:\n        print(os.path.join(dirname, filename))\n\n# You can write up to 20GB to the current directory (/kaggle/working/) that gets preserved as output when you create a version using \"Save & Run All\" \n# You can also write temporary files to /kaggle/temp/, but they won't be saved outside of the current session","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"**Notebooks Referenced**\n\n[How to kill all your efforts?](https://www.kaggle.com/code/alexryzhkov/how-to-kill-all-your-efforts) by @alexryzhkov (of interest, not a contributing model).\n\n[Calibration is all you need!](https://www.kaggle.com/code/alexryzhkov/calibration-is-all-you-need) by @alexryzhkov (of interest, not a contributing model).\n\n[Rocket Probe](https://www.kaggle.com/code/jbomitchell/rocket-probe) by @jbomitchell (could be used to set parameters, not a directly contributing model to the ensemble).\n\n[Mean Probabilities from Training Data](https://www.kaggle.com/code/jbomitchell/mean-probabilities-from-training-data) by @jbomitchell (could be used to set parameters, not a directly contributing model to the ensemble).\n\n[Tabular Playground Oct 2022 - Catboost](https://www.kaggle.com/code/stautxie/tabular-playground-oct-2022-catboost) by @stautxie 0.20088.\n\n[TPS Oct 2022 | EDA + Hybrid Model + Ensemble](https://www.kaggle.com/code/infrarosso/tps-oct-2022-eda-hybrid-model-ensemble) by @infrarosso 0.19914.\n\n[Tabular Playground Oct 2022 - Baseline](https://www.kaggle.com/code/stautxie/tabular-playground-oct-2022-baseline) by @stautxie 0.20334.\n\n[Oct 22 Tabular (simple lgbm)](https://www.kaggle.com/code/tracyporter/oct-22-tabular-simple-lgbm) by @tracyporter 0.20352.\n\n[Rocket League | XGBoost + Feat Engineering + CV](https://www.kaggle.com/code/chazzer/rocket-league-xgboost-feat-engineering-cv) by @chazzer 0.19870.\n\n[Tabular Playground Oct 2022 Ensemble](https://www.kaggle.com/code/stautxie/tabular-playground-oct-2022-ensemble) by @stautxie 0.20014.\n\n[TP Oct 2022 - Lightgbm](https://www.kaggle.com/code/stautxie/tp-oct-2022-lightgbm) by @stautxie 0.20069.\n\n[TPS - Oct 2022](https://www.kaggle.com/code/sfktrkl/tps-oct-2022) by @sfktrkl 0.19987.\n\n[TPS OCT 22 LAMA (LightAutoML) FE+Sampling](https://www.kaggle.com/code/mukaseevru/tps-oct-22-lama-lightautoml-fe-sampling) by @mukaseevru 0.20037.\n\n[TPS-2022-10 Fastai](https://www.kaggle.com/code/paddykb/tps-2022-10-fastai) by @paddykb 0.19198.\n\n[Tabular playground -CatB - Inference](https://www.kaggle.com/code/ahmedelfazouan/tabular-playground-catb-inference) by @ahmedelfazouan 0.19775.\n\n[TPSOCT22 CTB Online Learning](https://www.kaggle.com/code/alvinleenh/tpsoct22-ctb-online-learning) by @alvinleenh (v15) 0.20124.\n\n[TPS-OCT22](https://www.kaggle.com/code/mustafakeser4/tps-oct22) by @mustafakeser4 0.20042.\n\n[TPS-2022-10-ensemble](https://www.kaggle.com/code/e0xextazy/tps-2022-10-ensemble) by @e0xextazy 0.19159.\n\n[TPS-2022-10 Fastai - Proof of concept new features](https://www.kaggle.com/code/pietromaldini1/tps-2022-10-fastai-proof-of-concept-new-features) by @pietromaldini1 0.19271.\n\n[TPS Oct22-Continuous Learning: Merged targets](https://www.kaggle.com/code/slythe/tps-oct22-continuous-learning-merged-targets) by @slythe 0.19943.\n\n[2022/TPS/Oct_simple_downsampling_lightGBM_baseline](https://www.kaggle.com/code/wasshoiwasshoi/2022-tps-oct-simple-downsampling-lightgbm-baseline) by @wasshoiwasshoi 0.19992.\n\n[TPSOCT22, Insightful EDA+FE+Modeling](https://www.kaggle.com/code/hasanbasriakcay/tpsoct22-insightful-eda-fe-modeling) by @hasanbasriakcay (v34) 0.19789.\n\n[Ensemble Learning | 🚀 Rocket League LB 0.196](https://www.kaggle.com/code/chazzer/ensemble-learning-rocket-league-lb-0-196) by @chazzer 0.19583.\n\n[TPS-2022-10 FastAI (with multistart and TTA)](https://www.kaggle.com/code/alexryzhkov/tps-2022-10-fastai-with-multistart-and-tta) by @alexryzhkov 0.18880.\n\n[TPS Oct., 2022 Viz Players' Positions. Animated.](https://www.kaggle.com/code/sergiosaharovskiy/tps-oct-2022-viz-players-positions-animated) by @sergiosaharovskiy 0.19153.\n\n[TPS - Oct 2022](https://www.kaggle.com/code/viktortaran/tps-oct-2022) by @viktortaran 0.18985.\n\n[TPS OCT 2022 EDA and ensemble, Hybrid Model](https://www.kaggle.com/code/shariful07/tps-oct-2022-eda-and-ensemble-hybrid-model) by @shariful07 0.18960.\n\n[TPS Oct 2022 - Featuring Rocket League](https://www.kaggle.com/code/saraswatitiwari/tps-oct-2022-featuring-rocket-league) by @saraswatitiwari 0.19200.\n\n[TPU tabular dataset starter](https://www.kaggle.com/code/pietromaldini1/tpu-tabular-dataset-starter) by @pietromaldini1 0.19518.\n\n[LGBM | FE | Incremental learning | TPS Oct 2022](https://www.kaggle.com/code/cristiansanabria/lgbm-fe-incremental-learning-tps-oct-2022) by @cristiansanabria 0.19525.\n\n[TPS 22- CV Baseline](https://www.kaggle.com/code/slythe/tps-22-cv-baseline) by @slythe 0.19770.\n\n[TPU reconstruction network](https://www.kaggle.com/code/pietromaldini1/tpu-reconstruction-network) by @pietromaldini1 0.19395.","metadata":{}},{"cell_type":"code","source":"sub = pd.read_csv('../input/tabular-playground-series-oct-2022/sample_submission.csv')\nsub.sort_values(by=['id'], inplace=True)\nsub20352 = pd.read_csv('../input/league-of-rockets/20352_submission.csv')\nsub20352.sort_values(by=['id'], inplace=True)\nsub20334 = pd.read_csv('../input/league-of-rockets/20334_submission.csv')\nsub20334.sort_values(by=['id'], inplace=True)\nsub20157 = pd.read_csv('../input/league-of-rockets/20157_submission.csv')\nsub20157.sort_values(by=['id'], inplace=True)\nsub20124 = pd.read_csv('../input/league-of-rockets/20124_submission.csv')\nsub20124.sort_values(by=['id'], inplace=True)\nsub20088 = pd.read_csv('../input/league-of-rockets/20088_submission.csv')\nsub20088.sort_values(by=['id'], inplace=True)\nsub20073 = pd.read_csv('../input/league-of-rockets/20073_submission.csv')\nsub20073.sort_values(by=['id'], inplace=True)\nsub20069 = pd.read_csv('../input/league-of-rockets/20069_submission.csv')\nsub20069.sort_values(by=['id'], inplace=True)\nsub20042 = pd.read_csv('../input/league-of-rockets/20042_submission.csv')\nsub20042.sort_values(by=['id'], inplace=True)\nsub20037 = pd.read_csv('../input/league-of-rockets/20037_submission.csv')\nsub20037.sort_values(by=['id'], inplace=True)\nsub20029 = pd.read_csv('../input/league-of-rockets/20029_submission.csv')\nsub20029.sort_values(by=['id'], inplace=True)\nsub20014 = pd.read_csv('../input/league-of-rockets/20014_submission.csv')\nsub20014.sort_values(by=['id'], inplace=True)\nsub20003 = pd.read_csv('../input/league-of-rockets/20003_submission.csv')\nsub20003.sort_values(by=['id'], inplace=True)\nsub19992 = pd.read_csv('../input/league-of-rockets/19992_submission.csv')\nsub19992.sort_values(by=['id'], inplace=True)\nsub19987 = pd.read_csv('../input/league-of-rockets/19987_submission.csv')\nsub19987.sort_values(by=['id'], inplace=True)\nsub19943 = pd.read_csv('../input/league-of-rockets/19943_submission.csv')\nsub19943.sort_values(by=['id'], inplace=True)\nsub19914 = pd.read_csv('../input/league-of-rockets/19914_submission.csv')\nsub19914.sort_values(by=['id'], inplace=True)\nsub19899 = pd.read_csv('../input/league-of-rockets/19899_submission.csv')\nsub19899.sort_values(by=['id'], inplace=True)\nsub19893 = pd.read_csv('../input/league-of-rockets/19893_submission.csv')\nsub19893.sort_values(by=['id'], inplace=True)\nsub19891 = pd.read_csv('../input/league-of-rockets/19891_submission.csv')\nsub19891.sort_values(by=['id'], inplace=True)\nsub19886 = pd.read_csv('../input/league-of-rockets/19886_submission.csv')\nsub19886.sort_values(by=['id'], inplace=True)\nsub19870 = pd.read_csv('../input/league-of-rockets/19870_submission.csv')\nsub19870.sort_values(by=['id'], inplace=True)\nsub19855 = pd.read_csv('../input/league-of-rockets/19855_submission.csv')\nsub19855.sort_values(by=['id'], inplace=True)\nsub19854 = pd.read_csv('../input/league-of-rockets/19854_submission.csv')\nsub19854.sort_values(by=['id'], inplace=True)\nsub19852 = pd.read_csv('../input/league-of-rockets/19852_submission.csv')\nsub19852.sort_values(by=['id'], inplace=True)\nsub19789 = pd.read_csv('../input/league-of-rockets/19789_submission.csv')\nsub19789.sort_values(by=['id'], inplace=True)\nsub19778 = pd.read_csv('../input/league-of-rockets/19778_submission.csv')\nsub19778.sort_values(by=['id'], inplace=True)\nsub19775 = pd.read_csv('../input/league-of-rockets/19775_submission.csv')\nsub19775.sort_values(by=['id'], inplace=True)\nsub19770 = pd.read_csv('../input/league-of-rockets/19770_submission.csv')\nsub19770.sort_values(by=['id'], inplace=True)\nsub19704 = pd.read_csv('../input/league-of-rockets/19704_submission.csv')\nsub19704.sort_values(by=['id'], inplace=True)\nsub19704a = pd.read_csv('../input/league-of-rockets/19704a_submission.csv')\nsub19704a.sort_values(by=['id'], inplace=True)\nsub19682 = pd.read_csv('../input/league-of-rockets/19682_submission.csv')\nsub19682.sort_values(by=['id'], inplace=True)\nsub19674 = pd.read_csv('../input/league-of-rockets/19674_submission.csv')\nsub19674.sort_values(by=['id'], inplace=True)\nsub19665 = pd.read_csv('../input/league-of-rockets/19664_submission.csv')\nsub19665.sort_values(by=['id'], inplace=True)\nsub19664 = pd.read_csv('../input/league-of-rockets/19665_submission.csv')\nsub19664.sort_values(by=['id'], inplace=True)\nsub19601 = pd.read_csv('../input/league-of-rockets/19601_submission.csv')\nsub19601.sort_values(by=['id'], inplace=True)\nsub19597 = pd.read_csv('../input/league-of-rockets/19597_submission.csv')\nsub19597.sort_values(by=['id'], inplace=True)\nsub19589 = pd.read_csv('../input/league-of-rockets/19583_submission.csv')\nsub19589.sort_values(by=['id'], inplace=True)\nsub19583 = pd.read_csv('../input/league-of-rockets/19583_submission.csv')\nsub19583.sort_values(by=['id'], inplace=True)\nsub19581 = pd.read_csv('../input/league-of-rockets/19581_submission.csv')\nsub19581.sort_values(by=['id'], inplace=True)\nsub19532 = pd.read_csv('../input/league-of-rockets/19532_submission.csv')\nsub19532.sort_values(by=['id'], inplace=True)\nsub19525 = pd.read_csv('../input/league-of-rockets/19525_submission.csv')\nsub19525.sort_values(by=['id'], inplace=True)\nsub19519 = pd.read_csv('../input/league-of-rockets/19519_submission.csv')\nsub19519.sort_values(by=['id'], inplace=True)\nsub19518 = pd.read_csv('../input/league-of-rockets/19518_submission.csv')\nsub19518.sort_values(by=['id'], inplace=True)\nsub19443 = pd.read_csv('../input/league-of-rockets/19443_submission.csv')\nsub19443.sort_values(by=['id'], inplace=True)\nsub19442 = pd.read_csv('../input/league-of-rockets/19442_submission.csv')\nsub19442.sort_values(by=['id'], inplace=True)\nsub19395 = pd.read_csv('../input/league-of-rockets/19395_submission.csv')\nsub19395.sort_values(by=['id'], inplace=True)\nsub19272 = pd.read_csv('../input/league-of-rockets/19272_submission.csv')\nsub19272.sort_values(by=['id'], inplace=True)\nsub19271 = pd.read_csv('../input/league-of-rockets/19271_submission.csv')\nsub19271.sort_values(by=['id'], inplace=True)\nsub19200 = pd.read_csv('../input/league-of-rockets/19200_submission.csv')\nsub19200.sort_values(by=['id'], inplace=True)\nsub19198 = pd.read_csv('../input/league-of-rockets/19198_submission.csv')\nsub19198.sort_values(by=['id'], inplace=True)\nsub19165 = pd.read_csv('../input/league-of-rockets/19165_submission.csv')\nsub19165.sort_values(by=['id'], inplace=True)\nsub19153 = pd.read_csv('../input/league-of-rockets/19153_submission.csv')\nsub19153.sort_values(by=['id'], inplace=True)\nsub19144 = pd.read_csv('../input/league-of-rockets/19144_submission.csv')\nsub19144.sort_values(by=['id'], inplace=True)\nsub19093 = pd.read_csv('../input/league-of-rockets/19093_submission.csv')\nsub19093.sort_values(by=['id'], inplace=True)\nsub18985 = pd.read_csv('../input/league-of-rockets/18985_submission.csv')\nsub18985.sort_values(by=['id'], inplace=True)\nsub18960 = pd.read_csv('../input/league-of-rockets/18960_submission.csv')\nsub18960.sort_values(by=['id'], inplace=True)\nsub18880 = pd.read_csv('../input/league-of-rockets/18880_submission.csv')\nsub18880.sort_values(by=['id'], inplace=True)","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"print('sub20352 mean probs for A & B: ', sub20352['team_A_scoring_within_10sec'].mean(), sub20352['team_B_scoring_within_10sec'].mean())\nprint('sub20334 mean probs for A & B: ', sub20334['team_A_scoring_within_10sec'].mean(), sub20334['team_B_scoring_within_10sec'].mean())\nprint('sub20157 mean probs for A & B: ', sub20157['team_A_scoring_within_10sec'].mean(), sub20157['team_B_scoring_within_10sec'].mean())\nprint('sub20124 mean probs for A & B: ', sub20124['team_A_scoring_within_10sec'].mean(), sub20124['team_B_scoring_within_10sec'].mean())\nprint('sub20088 mean probs for A & B: ', sub20088['team_A_scoring_within_10sec'].mean(), sub20088['team_B_scoring_within_10sec'].mean())\nprint('sub20073 mean probs for A & B: ', sub20073['team_A_scoring_within_10sec'].mean(), sub20073['team_B_scoring_within_10sec'].mean())\nprint('sub20069 mean probs for A & B: ', sub20069['team_A_scoring_within_10sec'].mean(), sub20069['team_B_scoring_within_10sec'].mean())\nprint('sub20042 mean probs for A & B: ', sub20042['team_A_scoring_within_10sec'].mean(), sub20042['team_B_scoring_within_10sec'].mean())\nprint('sub20037 mean probs for A & B: ', sub20037['team_A_scoring_within_10sec'].mean(), sub20037['team_B_scoring_within_10sec'].mean())\nprint('sub20029 mean probs for A & B: ', sub20029['team_A_scoring_within_10sec'].mean(), sub20029['team_B_scoring_within_10sec'].mean())\nprint('sub20014 mean probs for A & B: ', sub20014['team_A_scoring_within_10sec'].mean(), sub20014['team_B_scoring_within_10sec'].mean())\nprint('sub20003 mean probs for A & B: ', sub20003['team_A_scoring_within_10sec'].mean(), sub20003['team_B_scoring_within_10sec'].mean())\nprint('sub19992 mean probs for A & B: ', sub19992['team_A_scoring_within_10sec'].mean(), sub19992['team_B_scoring_within_10sec'].mean())\nprint('sub19987 mean probs for A & B: ', sub19987['team_A_scoring_within_10sec'].mean(), sub19987['team_B_scoring_within_10sec'].mean())\nprint('sub19943 mean probs for A & B: ', sub19943['team_A_scoring_within_10sec'].mean(), sub19943['team_B_scoring_within_10sec'].mean())\nprint('sub19914 mean probs for A & B: ', sub19914['team_A_scoring_within_10sec'].mean(), sub19914['team_B_scoring_within_10sec'].mean())\nprint('sub19899 mean probs for A & B: ', sub19899['team_A_scoring_within_10sec'].mean(), sub19899['team_B_scoring_within_10sec'].mean())\nprint('sub19893 mean probs for A & B: ', sub19893['team_A_scoring_within_10sec'].mean(), sub19893['team_B_scoring_within_10sec'].mean())\nprint('sub19891 mean probs for A & B: ', sub19891['team_A_scoring_within_10sec'].mean(), sub19891['team_B_scoring_within_10sec'].mean())\nprint('sub19886 mean probs for A & B: ', sub19886['team_A_scoring_within_10sec'].mean(), sub19886['team_B_scoring_within_10sec'].mean())\nprint('sub19870 mean probs for A & B: ', sub19870['team_A_scoring_within_10sec'].mean(), sub19870['team_B_scoring_within_10sec'].mean())\nprint('sub19855 mean probs for A & B: ', sub19855['team_A_scoring_within_10sec'].mean(), sub19855['team_B_scoring_within_10sec'].mean())\nprint('sub19854 mean probs for A & B: ', sub19854['team_A_scoring_within_10sec'].mean(), sub19854['team_B_scoring_within_10sec'].mean())\nprint('sub19852 mean probs for A & B: ', sub19852['team_A_scoring_within_10sec'].mean(), sub19852['team_B_scoring_within_10sec'].mean())\nprint('sub19789 mean probs for A & B: ', sub19789['team_A_scoring_within_10sec'].mean(), sub19789['team_B_scoring_within_10sec'].mean())\nprint('sub19778 mean probs for A & B: ', sub19778['team_A_scoring_within_10sec'].mean(), sub19778['team_B_scoring_within_10sec'].mean())\nprint('sub19775 mean probs for A & B: ', sub19775['team_A_scoring_within_10sec'].mean(), sub19775['team_B_scoring_within_10sec'].mean())\nprint('sub19770 mean probs for A & B: ', sub19770['team_A_scoring_within_10sec'].mean(), sub19770['team_B_scoring_within_10sec'].mean())\nprint('sub19704a mean probs for A, B: ', sub19704a['team_A_scoring_within_10sec'].mean(), sub19704a['team_B_scoring_within_10sec'].mean())\nprint('sub19704 mean probs for A & B: ', sub19704['team_A_scoring_within_10sec'].mean(), sub19704['team_B_scoring_within_10sec'].mean())\nprint('sub19682 mean probs for A & B: ', sub19682['team_A_scoring_within_10sec'].mean(), sub19682['team_B_scoring_within_10sec'].mean())\nprint('sub19674 mean probs for A & B: ', sub19674['team_A_scoring_within_10sec'].mean(), sub19674['team_B_scoring_within_10sec'].mean())\nprint('sub19665 mean probs for A & B: ', sub19665['team_A_scoring_within_10sec'].mean(), sub19665['team_B_scoring_within_10sec'].mean())\nprint('sub19664 mean probs for A & B: ', sub19664['team_A_scoring_within_10sec'].mean(), sub19664['team_B_scoring_within_10sec'].mean())\nprint('sub19601 mean probs for A & B: ', sub19601['team_A_scoring_within_10sec'].mean(), sub19601['team_B_scoring_within_10sec'].mean())\nprint('sub19597 mean probs for A & B: ', sub19597['team_A_scoring_within_10sec'].mean(), sub19597['team_B_scoring_within_10sec'].mean())\nprint('sub19589 mean probs for A & B: ', sub19589['team_A_scoring_within_10sec'].mean(), sub19589['team_B_scoring_within_10sec'].mean())\nprint('sub19583 mean probs for A & B: ', sub19583['team_A_scoring_within_10sec'].mean(), sub19583['team_B_scoring_within_10sec'].mean())\nprint('sub19581 mean probs for A & B: ', sub19581['team_A_scoring_within_10sec'].mean(), sub19581['team_B_scoring_within_10sec'].mean())\nprint('sub19532 mean probs for A & B: ', sub19532['team_A_scoring_within_10sec'].mean(), sub19532['team_B_scoring_within_10sec'].mean())\nprint('sub19525 mean probs for A & B: ', sub19525['team_A_scoring_within_10sec'].mean(), sub19525['team_B_scoring_within_10sec'].mean())\nprint('sub19519 mean probs for A & B: ', sub19519['team_A_scoring_within_10sec'].mean(), sub19519['team_B_scoring_within_10sec'].mean())\nprint('sub19518 mean probs for A & B: ', sub19518['team_A_scoring_within_10sec'].mean(), sub19518['team_B_scoring_within_10sec'].mean())\nprint('sub19443 mean probs for A & B: ', sub19443['team_A_scoring_within_10sec'].mean(), sub19443['team_B_scoring_within_10sec'].mean())\nprint('sub19442 mean probs for A & B: ', sub19442['team_A_scoring_within_10sec'].mean(), sub19442['team_B_scoring_within_10sec'].mean())\nprint('sub19395 mean probs for A & B: ', sub19395['team_A_scoring_within_10sec'].mean(), sub19395['team_B_scoring_within_10sec'].mean())\nprint('sub19272 mean probs for A & B: ', sub19272['team_A_scoring_within_10sec'].mean(), sub19272['team_B_scoring_within_10sec'].mean())\nprint('sub19271 mean probs for A & B: ', sub19271['team_A_scoring_within_10sec'].mean(), sub19271['team_B_scoring_within_10sec'].mean())\nprint('sub19200 mean probs for A & B: ', sub19200['team_A_scoring_within_10sec'].mean(), sub19200['team_B_scoring_within_10sec'].mean())\nprint('sub19198 mean probs for A & B: ', sub19198['team_A_scoring_within_10sec'].mean(), sub19198['team_B_scoring_within_10sec'].mean())\nprint('sub19165 mean probs for A & B: ', sub19165['team_A_scoring_within_10sec'].mean(), sub19165['team_B_scoring_within_10sec'].mean())\nprint('sub19153 mean probs for A & B: ', sub19153['team_A_scoring_within_10sec'].mean(), sub19153['team_B_scoring_within_10sec'].mean())\nprint('sub19144 mean probs for A & B: ', sub19144['team_A_scoring_within_10sec'].mean(), sub19144['team_B_scoring_within_10sec'].mean())\nprint('sub19093 mean probs for A & B: ', sub19093['team_A_scoring_within_10sec'].mean(), sub19093['team_B_scoring_within_10sec'].mean())\nprint('sub18985 mean probs for A & B: ', sub18985['team_A_scoring_within_10sec'].mean(), sub18985['team_B_scoring_within_10sec'].mean())\nprint('sub18960 mean probs for A & B: ', sub18960['team_A_scoring_within_10sec'].mean(), sub18960['team_B_scoring_within_10sec'].mean())\nprint('sub18880 mean probs for A & B: ', sub18880['team_A_scoring_within_10sec'].mean(), sub18880['team_B_scoring_within_10sec'].mean())","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"**Discussion**\n\nEach model represented in the ensemble is weighted by a factor that depends in an exponentially decaying manner on its public LB score. Specifically, each model is given an exponential weight according to\n\nexp(b*(S-x))\n\nwhere x is the public LB score of that model. Larger scores are worse, hence the weights get smaller as x increases and get larger as x decreases. Thus, the best models have the largest weights and make the largest contributions to the ensemble.\n\nThe parameter b is adjustable, the larger b is then the faster the weights decay as the score gets worse. The models in this ensemble can be thought of as corresponding to quantum states in statistical thermodynamics. Evidently, b is analogous to 1/kT in statistical thermodynamics and behaves like a reciprocal temperature. In thermodynamics textbooks this parameter is often called beta.\n\nThe LB score x is analogous to energy, since higher LB scores are bad in this competition the weights, which are effectively Boltzmann factors, decrease with increasing x. The opposite sign convention would have been used in a competition where higher LB scores are good.\n\nS is a calibration parameter defined such that if S is set to the best single model score then the highest weight is 1.0, which is convenient, but not essential.\n\nThe sum of the weights q is analogous to the partition function in statistical thermodynamics, and measures an effective number of contributing models. This is analogous to how the partition function, if calibrated such that the highest weight is 1.0, measures the number of thermally accessible quantum states. \n\nExperience of Kaggle's March Madness competitons suggests that log loss scoring requires predicted probabilities to be clipped short of 0.0 & 1.0 to avoid the large penalties that go with being over-confident and wrong. The parameter C is used to clip probabilities onto the range C to 1-C.\n\nThe factors FA and FB exist to account for possible systematic over- or under-prediction of scoring probabilities, FA for team A and FB for team B.","metadata":{}},{"cell_type":"code","source":"b = 1550.0\nS = 0.18880\nC = 0.01\nFA = 1.08\nFB = 1.08\nq = 0.0","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"sub['team_A_scoring_within_10sec'] = sub20073['team_A_scoring_within_10sec']*np.exp(b*(S-0.20073))\nq = q + np.exp(b*(S-0.20073))\nprint(q)\nsub['team_A_scoring_within_10sec'] = sub['team_A_scoring_within_10sec'] + sub20352['team_A_scoring_within_10sec']*np.exp(b*(S-0.20352))\nq = q + np.exp(b*(S-0.20352))\nprint(q)\nsub['team_A_scoring_within_10sec'] = sub['team_A_scoring_within_10sec'] + sub20334['team_A_scoring_within_10sec']*np.exp(b*(S-0.20334))\nq = q + np.exp(b*(S-0.20334))\nprint(q)\nsub['team_A_scoring_within_10sec'] = sub['team_A_scoring_within_10sec'] + sub20157['team_A_scoring_within_10sec']*np.exp(b*(S-0.20157))\nq = q + np.exp(b*(S-0.20157))\nprint(q)\nsub['team_A_scoring_within_10sec'] = sub['team_A_scoring_within_10sec'] + sub20124['team_A_scoring_within_10sec']*np.exp(b*(S-0.20124))\nq = q + np.exp(b*(S-0.20124))\nprint(q)\nsub['team_A_scoring_within_10sec'] = sub['team_A_scoring_within_10sec'] + sub20088['team_A_scoring_within_10sec']*np.exp(b*(S-0.20088))\nq = q + np.exp(b*(S-0.20088))\nprint(q)\n#sub20073 acounted for above\nsub['team_A_scoring_within_10sec'] = sub['team_A_scoring_within_10sec'] + sub20069['team_A_scoring_within_10sec']*np.exp(b*(S-0.20069))\nq = q + np.exp(b*(S-0.20069))\nprint(q)\nsub['team_A_scoring_within_10sec'] = sub['team_A_scoring_within_10sec'] + sub20042['team_A_scoring_within_10sec']*np.exp(b*(S-0.20042))\nq = q + np.exp(b*(S-0.20042))\nprint(q)\nsub['team_A_scoring_within_10sec'] = sub['team_A_scoring_within_10sec'] + sub20037['team_A_scoring_within_10sec']*np.exp(b*(S-0.20037))\nq = q + np.exp(b*(S-0.20037))\nprint(q)\nsub['team_A_scoring_within_10sec'] = sub['team_A_scoring_within_10sec'] + sub20029['team_A_scoring_within_10sec']*np.exp(b*(S-0.20029))\nq = q + np.exp(b*(S-0.20029))\nprint(q)\nsub['team_A_scoring_within_10sec'] = sub['team_A_scoring_within_10sec'] + sub20014['team_A_scoring_within_10sec']*np.exp(b*(S-0.20014))\nq = q + np.exp(b*(S-0.20014))\nprint(q)\nsub['team_A_scoring_within_10sec'] = sub['team_A_scoring_within_10sec'] + sub20003['team_A_scoring_within_10sec']*np.exp(b*(S-0.20003))\nq = q + np.exp(b*(S-0.20003))\nprint(q)\nsub['team_A_scoring_within_10sec'] = sub['team_A_scoring_within_10sec'] + sub19992['team_A_scoring_within_10sec']*np.exp(b*(S-0.19992))\nq = q + np.exp(b*(S-0.19992))\nprint(q)\nsub['team_A_scoring_within_10sec'] = sub['team_A_scoring_within_10sec'] + sub19987['team_A_scoring_within_10sec']*np.exp(b*(S-0.19987))\nq = q + np.exp(b*(S-0.19987))\nprint(q)\nsub['team_A_scoring_within_10sec'] = sub['team_A_scoring_within_10sec'] + sub19943['team_A_scoring_within_10sec']*np.exp(b*(S-0.19943))\nq = q + np.exp(b*(S-0.19943))\nprint(q)\nsub['team_A_scoring_within_10sec'] = sub['team_A_scoring_within_10sec'] + sub19914['team_A_scoring_within_10sec']*np.exp(b*(S-0.19914))\nq = q + np.exp(b*(S-0.19914))\nprint(q)\nsub['team_A_scoring_within_10sec'] = sub['team_A_scoring_within_10sec'] + sub19899['team_A_scoring_within_10sec']*np.exp(b*(S-0.19899))\nq = q + np.exp(b*(S-0.19899))\nprint(q)\nsub['team_A_scoring_within_10sec'] = sub['team_A_scoring_within_10sec'] + sub19893['team_A_scoring_within_10sec']*np.exp(b*(S-0.19893))\nq = q + np.exp(b*(S-0.19893))\nprint(q)\nsub['team_A_scoring_within_10sec'] = sub['team_A_scoring_within_10sec'] + sub19891['team_A_scoring_within_10sec']*np.exp(b*(S-0.19891))\nq = q + np.exp(b*(S-0.19891))\nprint(q)\nsub['team_A_scoring_within_10sec'] = sub['team_A_scoring_within_10sec'] + sub19886['team_A_scoring_within_10sec']*np.exp(b*(S-0.19886))\nq = q + np.exp(b*(S-0.19886))\nprint(q)\nsub['team_A_scoring_within_10sec'] = sub['team_A_scoring_within_10sec'] + sub19870['team_A_scoring_within_10sec']*np.exp(b*(S-0.19870))\nq = q + np.exp(b*(S-0.19870))\nprint(q)\nsub['team_A_scoring_within_10sec'] = sub['team_A_scoring_within_10sec'] + sub19855['team_A_scoring_within_10sec']*np.exp(b*(S-0.19855))\nq = q + np.exp(b*(S-0.19855))\nprint(q)\nsub['team_A_scoring_within_10sec'] = sub['team_A_scoring_within_10sec'] + sub19854['team_A_scoring_within_10sec']*np.exp(b*(S-0.19854))\nq = q + np.exp(b*(S-0.19854))\nprint(q)\nsub['team_A_scoring_within_10sec'] = sub['team_A_scoring_within_10sec'] + sub19852['team_A_scoring_within_10sec']*np.exp(b*(S-0.19852))\nq = q + np.exp(b*(S-0.19852))\nprint(q)\nsub['team_A_scoring_within_10sec'] = sub['team_A_scoring_within_10sec'] + sub19789['team_A_scoring_within_10sec']*np.exp(b*(S-0.19789))\nq = q + np.exp(b*(S-0.19789))\nprint(q)\nsub['team_A_scoring_within_10sec'] = sub['team_A_scoring_within_10sec'] + sub19778['team_A_scoring_within_10sec']*np.exp(b*(S-0.19778))\nq = q + np.exp(b*(S-0.19778))\nprint(q)\nsub['team_A_scoring_within_10sec'] = sub['team_A_scoring_within_10sec'] + sub19775['team_A_scoring_within_10sec']*np.exp(b*(S-0.19775))\nq = q + np.exp(b*(S-0.19775))\nprint(q)\nsub['team_A_scoring_within_10sec'] = sub['team_A_scoring_within_10sec'] + sub19770['team_A_scoring_within_10sec']*np.exp(b*(S-0.19770))\nq = q + np.exp(b*(S-0.19770))\nprint(q)\nsub['team_A_scoring_within_10sec'] = sub['team_A_scoring_within_10sec'] + sub19704['team_A_scoring_within_10sec']*np.exp(b*(S-0.19704))\nq = q + np.exp(b*(S-0.19704))\nprint(q)\nsub['team_A_scoring_within_10sec'] = sub['team_A_scoring_within_10sec'] + sub19704a['team_A_scoring_within_10sec']*np.exp(b*(S-0.19704))\nq = q + np.exp(b*(S-0.19704))\nprint(q)\nsub['team_A_scoring_within_10sec'] = sub['team_A_scoring_within_10sec'] + sub19682['team_A_scoring_within_10sec']*np.exp(b*(S-0.19682))\nq = q + np.exp(b*(S-0.19682))\nprint(q)\nsub['team_A_scoring_within_10sec'] = sub['team_A_scoring_within_10sec'] + sub19674['team_A_scoring_within_10sec']*np.exp(b*(S-0.19674))\nq = q + np.exp(b*(S-0.19674))\nprint(q)\nsub['team_A_scoring_within_10sec'] = sub['team_A_scoring_within_10sec'] + sub19665['team_A_scoring_within_10sec']*np.exp(b*(S-0.19665))\nq = q + np.exp(b*(S-0.19665))\nprint(q)\nsub['team_A_scoring_within_10sec'] = sub['team_A_scoring_within_10sec'] + sub19664['team_A_scoring_within_10sec']*np.exp(b*(S-0.19664))\nq = q + np.exp(b*(S-0.19664))\nprint(q)\nsub['team_A_scoring_within_10sec'] = sub['team_A_scoring_within_10sec'] + sub19601['team_A_scoring_within_10sec']*np.exp(b*(S-0.19601))\nq = q + np.exp(b*(S-0.19601))\nprint(q)\nsub['team_A_scoring_within_10sec'] = sub['team_A_scoring_within_10sec'] + sub19597['team_A_scoring_within_10sec']*np.exp(b*(S-0.19597))\nq = q + np.exp(b*(S-0.19597))\nprint(q)\nsub['team_A_scoring_within_10sec'] = sub['team_A_scoring_within_10sec'] + sub19589['team_A_scoring_within_10sec']*np.exp(b*(S-0.19589))\nq = q + np.exp(b*(S-0.19589))\nprint(q)\nsub['team_A_scoring_within_10sec'] = sub['team_A_scoring_within_10sec'] + sub19583['team_A_scoring_within_10sec']*np.exp(b*(S-0.19583))\nq = q + np.exp(b*(S-0.19583))\nprint(q)\nsub['team_A_scoring_within_10sec'] = sub['team_A_scoring_within_10sec'] + sub19581['team_A_scoring_within_10sec']*np.exp(b*(S-0.19581))\nq = q + np.exp(b*(S-0.19581))\nprint(q)\nsub['team_A_scoring_within_10sec'] = sub['team_A_scoring_within_10sec'] + sub19532['team_A_scoring_within_10sec']*np.exp(b*(S-0.19532))\nq = q + np.exp(b*(S-0.19532))\nprint(q)\nsub['team_A_scoring_within_10sec'] = sub['team_A_scoring_within_10sec'] + sub19525['team_A_scoring_within_10sec']*np.exp(b*(S-0.19525))\nq = q + np.exp(b*(S-0.19525))\nprint(q)\nsub['team_A_scoring_within_10sec'] = sub['team_A_scoring_within_10sec'] + sub19519['team_A_scoring_within_10sec']*np.exp(b*(S-0.19519))\nq = q + np.exp(b*(S-0.19519))\nprint(q)\nsub['team_A_scoring_within_10sec'] = sub['team_A_scoring_within_10sec'] + sub19518['team_A_scoring_within_10sec']*np.exp(b*(S-0.19518))\nq = q + np.exp(b*(S-0.19518))\nprint(q)\nsub['team_A_scoring_within_10sec'] = sub['team_A_scoring_within_10sec'] + sub19443['team_A_scoring_within_10sec']*np.exp(b*(S-0.19443))\nq = q + np.exp(b*(S-0.19443))\nprint(q)\nsub['team_A_scoring_within_10sec'] = sub['team_A_scoring_within_10sec'] + sub19442['team_A_scoring_within_10sec']*np.exp(b*(S-0.19442))\nq = q + np.exp(b*(S-0.19442))\nprint(q)\nsub['team_A_scoring_within_10sec'] = sub['team_A_scoring_within_10sec'] + sub19395['team_A_scoring_within_10sec']*np.exp(b*(S-0.19395))\nq = q + np.exp(b*(S-0.19395))\nprint(q)\nsub['team_A_scoring_within_10sec'] = sub['team_A_scoring_within_10sec'] + sub19272['team_A_scoring_within_10sec']*np.exp(b*(S-0.19272))\nq = q + np.exp(b*(S-0.19272))\nprint(q)\nsub['team_A_scoring_within_10sec'] = sub['team_A_scoring_within_10sec'] + sub19271['team_A_scoring_within_10sec']*np.exp(b*(S-0.19271))\nq = q + np.exp(b*(S-0.19271))\nprint(q)\nsub['team_A_scoring_within_10sec'] = sub['team_A_scoring_within_10sec'] + sub19200['team_A_scoring_within_10sec']*np.exp(b*(S-0.19200))\nq = q + np.exp(b*(S-0.19200))\nprint(q)\nsub['team_A_scoring_within_10sec'] = sub['team_A_scoring_within_10sec'] + sub19198['team_A_scoring_within_10sec']*np.exp(b*(S-0.19198))\nq = q + np.exp(b*(S-0.19198))\nprint(q)\nsub['team_A_scoring_within_10sec'] = sub['team_A_scoring_within_10sec'] + sub19165['team_A_scoring_within_10sec']*np.exp(b*(S-0.19165))\nq = q + np.exp(b*(S-0.19165))\nprint(q)\nsub['team_A_scoring_within_10sec'] = sub['team_A_scoring_within_10sec'] + sub19153['team_A_scoring_within_10sec']*np.exp(b*(S-0.19153))\nq = q + np.exp(b*(S-0.19153))\nprint(q)\nsub['team_A_scoring_within_10sec'] = sub['team_A_scoring_within_10sec'] + sub19144['team_A_scoring_within_10sec']*np.exp(b*(S-0.19144))\nq = q + np.exp(b*(S-0.19144))\nprint(q)\nsub['team_A_scoring_within_10sec'] = sub['team_A_scoring_within_10sec'] + sub19093['team_A_scoring_within_10sec']*np.exp(b*(S-0.19093))\nq = q + np.exp(b*(S-0.19093))\nprint(q)\nsub['team_A_scoring_within_10sec'] = sub['team_A_scoring_within_10sec'] + sub18985['team_A_scoring_within_10sec']*np.exp(b*(S-0.18985))\nq = q + np.exp(b*(S-0.18985))\nprint(q)\nsub['team_A_scoring_within_10sec'] = sub['team_A_scoring_within_10sec'] + sub18960['team_A_scoring_within_10sec']*np.exp(b*(S-0.18960))\nq = q + np.exp(b*(S-0.18960))\nprint(q)\nsub['team_A_scoring_within_10sec'] = sub['team_A_scoring_within_10sec'] + sub18880['team_A_scoring_within_10sec']*np.exp(b*(S-0.18880))\nq = q + np.exp(b*(S-0.18880))\nprint(q)\nsub['team_A_scoring_within_10sec'] = sub['team_A_scoring_within_10sec']/q","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"print('Unscaled mean prob for A: ', sub['team_A_scoring_within_10sec'].mean())","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"q = 0.0\nsub['team_B_scoring_within_10sec'] = sub20073['team_B_scoring_within_10sec']*np.exp(b*(S-0.20073))\nq = q + np.exp(b*(S-0.20073))\nprint(q)\nsub['team_B_scoring_within_10sec'] = sub['team_B_scoring_within_10sec'] + sub20352['team_B_scoring_within_10sec']*np.exp(b*(S-0.20352))\nq = q + np.exp(b*(S-0.20352))\nprint(q)\nsub['team_B_scoring_within_10sec'] = sub['team_B_scoring_within_10sec'] + sub20334['team_B_scoring_within_10sec']*np.exp(b*(S-0.20334))\nq = q + np.exp(b*(S-0.20334))\nprint(q)\nsub['team_B_scoring_within_10sec'] = sub['team_B_scoring_within_10sec'] + sub20157['team_B_scoring_within_10sec']*np.exp(b*(S-0.20157))\nq = q + np.exp(b*(S-0.20157))\nprint(q)\nsub['team_B_scoring_within_10sec'] = sub['team_B_scoring_within_10sec'] + sub20124['team_B_scoring_within_10sec']*np.exp(b*(S-0.20124))\nq = q + np.exp(b*(S-0.20124))\nprint(q)\nsub['team_A_scoring_within_10sec'] = sub['team_A_scoring_within_10sec'] + sub20088['team_B_scoring_within_10sec']*np.exp(b*(S-0.20088))\nq = q + np.exp(b*(S-0.20088))\nprint(q)\n#sub20073 acounted for above\nsub['team_B_scoring_within_10sec'] = sub['team_B_scoring_within_10sec'] + sub20069['team_B_scoring_within_10sec']*np.exp(b*(S-0.20069))\nq = q + np.exp(b*(S-0.20069))\nprint(q)\nsub['team_B_scoring_within_10sec'] = sub['team_B_scoring_within_10sec'] + sub20042['team_B_scoring_within_10sec']*np.exp(b*(S-0.20042))\nq = q + np.exp(b*(S-0.20042))\nprint(q)\nsub['team_B_scoring_within_10sec'] = sub['team_B_scoring_within_10sec'] + sub20037['team_B_scoring_within_10sec']*np.exp(b*(S-0.20037))\nq = q + np.exp(b*(S-0.20037))\nprint(q)\nsub['team_B_scoring_within_10sec'] = sub['team_B_scoring_within_10sec'] + sub20029['team_B_scoring_within_10sec']*np.exp(b*(S-0.20029))\nq = q + np.exp(b*(S-0.20029))\nprint(q)\nsub['team_B_scoring_within_10sec'] = sub['team_B_scoring_within_10sec'] + sub20014['team_B_scoring_within_10sec']*np.exp(b*(S-0.20014))\nq = q + np.exp(b*(S-0.20014))\nprint(q)\nsub['team_B_scoring_within_10sec'] = sub['team_B_scoring_within_10sec'] + sub20003['team_B_scoring_within_10sec']*np.exp(b*(S-0.20003))\nq = q + np.exp(b*(S-0.20003))\nprint(q)\nsub['team_B_scoring_within_10sec'] = sub['team_B_scoring_within_10sec'] + sub19992['team_B_scoring_within_10sec']*np.exp(b*(S-0.19992))\nq = q + np.exp(b*(S-0.19992))\nprint(q)\nsub['team_B_scoring_within_10sec'] = sub['team_B_scoring_within_10sec'] + sub19987['team_B_scoring_within_10sec']*np.exp(b*(S-0.19987))\nq = q + np.exp(b*(S-0.19987))\nprint(q)\nsub['team_B_scoring_within_10sec'] = sub['team_B_scoring_within_10sec'] + sub19943['team_B_scoring_within_10sec']*np.exp(b*(S-0.19943))\nq = q + np.exp(b*(S-0.19943))\nprint(q)\nsub['team_B_scoring_within_10sec'] = sub['team_B_scoring_within_10sec'] + sub19914['team_B_scoring_within_10sec']*np.exp(b*(S-0.19914))\nq = q + np.exp(b*(S-0.19914))\nprint(q)\nsub['team_B_scoring_within_10sec'] = sub['team_B_scoring_within_10sec'] + sub19899['team_B_scoring_within_10sec']*np.exp(b*(S-0.19899))\nq = q + np.exp(b*(S-0.19899))\nprint(q)\nsub['team_B_scoring_within_10sec'] = sub['team_B_scoring_within_10sec'] + sub19893['team_B_scoring_within_10sec']*np.exp(b*(S-0.19893))\nq = q + np.exp(b*(S-0.19893))\nprint(q)\nsub['team_B_scoring_within_10sec'] = sub['team_B_scoring_within_10sec'] + sub19891['team_B_scoring_within_10sec']*np.exp(b*(S-0.19891))\nq = q + np.exp(b*(S-0.19891))\nprint(q)\nsub['team_B_scoring_within_10sec'] = sub['team_B_scoring_within_10sec'] + sub19886['team_B_scoring_within_10sec']*np.exp(b*(S-0.19886))\nq = q + np.exp(b*(S-0.19886))\nprint(q)\nsub['team_B_scoring_within_10sec'] = sub['team_B_scoring_within_10sec'] + sub19870['team_B_scoring_within_10sec']*np.exp(b*(S-0.19870))\nq = q + np.exp(b*(S-0.19870))\nprint(q)\nsub['team_B_scoring_within_10sec'] = sub['team_B_scoring_within_10sec'] + sub19855['team_B_scoring_within_10sec']*np.exp(b*(S-0.19855))\nq = q + np.exp(b*(S-0.19855))\nprint(q)\nsub['team_B_scoring_within_10sec'] = sub['team_B_scoring_within_10sec'] + sub19854['team_B_scoring_within_10sec']*np.exp(b*(S-0.19854))\nq = q + np.exp(b*(S-0.19854))\nprint(q)\nsub['team_B_scoring_within_10sec'] = sub['team_B_scoring_within_10sec'] + sub19852['team_B_scoring_within_10sec']*np.exp(b*(S-0.19852))\nq = q + np.exp(b*(S-0.19852))\nprint(q)\nsub['team_B_scoring_within_10sec'] = sub['team_B_scoring_within_10sec'] + sub19789['team_B_scoring_within_10sec']*np.exp(b*(S-0.19789))\nq = q + np.exp(b*(S-0.19789))\nprint(q)\nsub['team_B_scoring_within_10sec'] = sub['team_B_scoring_within_10sec'] + sub19778['team_B_scoring_within_10sec']*np.exp(b*(S-0.19778))\nq = q + np.exp(b*(S-0.19778))\nprint(q)\nsub['team_B_scoring_within_10sec'] = sub['team_B_scoring_within_10sec'] + sub19775['team_B_scoring_within_10sec']*np.exp(b*(S-0.19775))\nq = q + np.exp(b*(S-0.19775))\nprint(q)\nsub['team_B_scoring_within_10sec'] = sub['team_B_scoring_within_10sec'] + sub19770['team_B_scoring_within_10sec']*np.exp(b*(S-0.19770))\nq = q + np.exp(b*(S-0.19770))\nprint(q)\nsub['team_B_scoring_within_10sec'] = sub['team_B_scoring_within_10sec'] + sub19704['team_B_scoring_within_10sec']*np.exp(b*(S-0.19704))\nq = q + np.exp(b*(S-0.19704))\nprint(q)\nsub['team_B_scoring_within_10sec'] = sub['team_B_scoring_within_10sec'] + sub19704a['team_B_scoring_within_10sec']*np.exp(b*(S-0.19704))\nq = q + np.exp(b*(S-0.19704))\nprint(q)\nsub['team_B_scoring_within_10sec'] = sub['team_B_scoring_within_10sec'] + sub19682['team_B_scoring_within_10sec']*np.exp(b*(S-0.19682))\nq = q + np.exp(b*(S-0.19682))\nprint(q)\nsub['team_B_scoring_within_10sec'] = sub['team_B_scoring_within_10sec'] + sub19674['team_B_scoring_within_10sec']*np.exp(b*(S-0.19674))\nq = q + np.exp(b*(S-0.19674))\nprint(q)\nsub['team_B_scoring_within_10sec'] = sub['team_B_scoring_within_10sec'] + sub19665['team_B_scoring_within_10sec']*np.exp(b*(S-0.19665))\nq = q + np.exp(b*(S-0.19665))\nprint(q)\nsub['team_B_scoring_within_10sec'] = sub['team_B_scoring_within_10sec'] + sub19664['team_B_scoring_within_10sec']*np.exp(b*(S-0.19664))\nq = q + np.exp(b*(S-0.19664))\nprint(q)\nsub['team_B_scoring_within_10sec'] = sub['team_B_scoring_within_10sec'] + sub19601['team_B_scoring_within_10sec']*np.exp(b*(S-0.19601))\nq = q + np.exp(b*(S-0.19601))\nprint(q)\nsub['team_B_scoring_within_10sec'] = sub['team_B_scoring_within_10sec'] + sub19597['team_B_scoring_within_10sec']*np.exp(b*(S-0.19597))\nq = q + np.exp(b*(S-0.19597))\nprint(q)\nsub['team_B_scoring_within_10sec'] = sub['team_B_scoring_within_10sec'] + sub19589['team_B_scoring_within_10sec']*np.exp(b*(S-0.19589))\nq = q + np.exp(b*(S-0.19589))\nprint(q)\nsub['team_B_scoring_within_10sec'] = sub['team_B_scoring_within_10sec'] + sub19583['team_B_scoring_within_10sec']*np.exp(b*(S-0.19583))\nq = q + np.exp(b*(S-0.19583))\nprint(q)\nsub['team_B_scoring_within_10sec'] = sub['team_B_scoring_within_10sec'] + sub19581['team_B_scoring_within_10sec']*np.exp(b*(S-0.19581))\nq = q + np.exp(b*(S-0.19581))\nprint(q)\nsub['team_B_scoring_within_10sec'] = sub['team_B_scoring_within_10sec'] + sub19532['team_B_scoring_within_10sec']*np.exp(b*(S-0.19532))\nq = q + np.exp(b*(S-0.19532))\nprint(q)\nsub['team_B_scoring_within_10sec'] = sub['team_B_scoring_within_10sec'] + sub19525['team_B_scoring_within_10sec']*np.exp(b*(S-0.19525))\nq = q + np.exp(b*(S-0.19525))\nprint(q)\nsub['team_B_scoring_within_10sec'] = sub['team_B_scoring_within_10sec'] + sub19519['team_B_scoring_within_10sec']*np.exp(b*(S-0.19519))\nq = q + np.exp(b*(S-0.19519))\nprint(q)\nsub['team_B_scoring_within_10sec'] = sub['team_B_scoring_within_10sec'] + sub19518['team_B_scoring_within_10sec']*np.exp(b*(S-0.19518))\nq = q + np.exp(b*(S-0.19518))\nprint(q)\nsub['team_B_scoring_within_10sec'] = sub['team_B_scoring_within_10sec'] + sub19443['team_B_scoring_within_10sec']*np.exp(b*(S-0.19443))\nq = q + np.exp(b*(S-0.19443))\nprint(q)\nsub['team_B_scoring_within_10sec'] = sub['team_B_scoring_within_10sec'] + sub19442['team_B_scoring_within_10sec']*np.exp(b*(S-0.19442))\nq = q + np.exp(b*(S-0.19442))\nprint(q)\nsub['team_B_scoring_within_10sec'] = sub['team_B_scoring_within_10sec'] + sub19395['team_B_scoring_within_10sec']*np.exp(b*(S-0.19395))\nq = q + np.exp(b*(S-0.19395))\nprint(q)\nsub['team_B_scoring_within_10sec'] = sub['team_B_scoring_within_10sec'] + sub19272['team_B_scoring_within_10sec']*np.exp(b*(S-0.19272))\nq = q + np.exp(b*(S-0.19272))\nprint(q)\nsub['team_B_scoring_within_10sec'] = sub['team_B_scoring_within_10sec'] + sub19271['team_B_scoring_within_10sec']*np.exp(b*(S-0.19271))\nq = q + np.exp(b*(S-0.19271))\nprint(q)\nsub['team_B_scoring_within_10sec'] = sub['team_B_scoring_within_10sec'] + sub19200['team_B_scoring_within_10sec']*np.exp(b*(S-0.19200))\nq = q + np.exp(b*(S-0.19200))\nprint(q)\nsub['team_B_scoring_within_10sec'] = sub['team_B_scoring_within_10sec'] + sub19198['team_B_scoring_within_10sec']*np.exp(b*(S-0.19198))\nq = q + np.exp(b*(S-0.19198))\nprint(q)\nsub['team_B_scoring_within_10sec'] = sub['team_B_scoring_within_10sec'] + sub19165['team_B_scoring_within_10sec']*np.exp(b*(S-0.19165))\nq = q + np.exp(b*(S-0.19165))\nprint(q)\nsub['team_B_scoring_within_10sec'] = sub['team_B_scoring_within_10sec'] + sub19153['team_B_scoring_within_10sec']*np.exp(b*(S-0.19153))\nq = q + np.exp(b*(S-0.19153))\nprint(q)\nsub['team_B_scoring_within_10sec'] = sub['team_B_scoring_within_10sec'] + sub19144['team_B_scoring_within_10sec']*np.exp(b*(S-0.19144))\nq = q + np.exp(b*(S-0.19144))\nprint(q)\nsub['team_B_scoring_within_10sec'] = sub['team_B_scoring_within_10sec'] + sub19093['team_B_scoring_within_10sec']*np.exp(b*(S-0.19093))\nq = q + np.exp(b*(S-0.19093))\nprint(q)\nsub['team_B_scoring_within_10sec'] = sub['team_B_scoring_within_10sec'] + sub18985['team_B_scoring_within_10sec']*np.exp(b*(S-0.18985))\nq = q + np.exp(b*(S-0.18985))\nprint(q)\nsub['team_B_scoring_within_10sec'] = sub['team_B_scoring_within_10sec'] + sub18960['team_B_scoring_within_10sec']*np.exp(b*(S-0.18960))\nq = q + np.exp(b*(S-0.18960))\nprint(q)\nsub['team_B_scoring_within_10sec'] = sub['team_B_scoring_within_10sec'] + sub18880['team_B_scoring_within_10sec']*np.exp(b*(S-0.18880))\nq = q + np.exp(b*(S-0.18880))\nprint(q)\nsub['team_B_scoring_within_10sec'] = sub['team_B_scoring_within_10sec']/q","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"print('Unscaled mean prob for A: ', sub['team_A_scoring_within_10sec'].mean())\nprint('Unscaled mean prob for B: ', sub['team_B_scoring_within_10sec'].mean())","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"The notebook [Rocket Probe](https://www.kaggle.com/code/jbomitchell/rocket-probe) allows us to estimate the mean values of the two teams' scoring probabilities in the Public LB data.","metadata":{}},{"cell_type":"code","source":"print('Estimated Public LB mean prob for A: ', 0.0598)\nprint('Estimated Public LB mean prob for B: ', 0.0591)","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"FAX = 0.0598/sub['team_A_scoring_within_10sec'].mean()\nFBX = 0.0591/sub['team_B_scoring_within_10sec'].mean()\nprint('Best Public LB guess for FA: ', FAX)\nprint('Best Public LB guess for FB: ', FBX)","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"The notebook [Mean Probabilities from Training Data](https://www.kaggle.com/code/jbomitchell/mean-probabilities-from-training-data) allows us to estimate the mean values of the two teams' scoring probabilities in the training data.","metadata":{}},{"cell_type":"code","source":"print('Training mean prob for A: ', 0.057090)\nprint('Training mean prob for B: ', 0.055325)","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"FAN = 0.057090/sub['team_A_scoring_within_10sec'].mean()\nFBN = 0.055325/sub['team_B_scoring_within_10sec'].mean()\nprint('Best training guess for FA: ', FAN)\nprint('Best training guess for FB: ', FBN)","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#FA = FAX\n#FB = FBX","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"sub['team_A_scoring_within_10sec'] = np.clip(FA*sub['team_A_scoring_within_10sec'], C, 1-C)\nsub['team_B_scoring_within_10sec'] = np.clip(FB*sub['team_B_scoring_within_10sec'], C, 1-C)","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"sub['AB_total'] = 0.0\nsub['AB_total'] = sub['team_A_scoring_within_10sec'] + sub['team_B_scoring_within_10sec'] + C","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"sub['team_A_scoring_within_10sec']  = sub['team_A_scoring_within_10sec'] / np.maximum(1.0,sub['AB_total'])\nsub['team_B_scoring_within_10sec']  = sub['team_B_scoring_within_10sec'] / np.maximum(1.0,sub['AB_total'])","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"sub['team_A_scoring_within_10sec'] = np.clip(sub['team_A_scoring_within_10sec'], C, 1-C)\nsub['team_B_scoring_within_10sec'] = np.clip(sub['team_B_scoring_within_10sec'], C, 1-C)","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"finalsub = pd.read_csv('../input/tabular-playground-series-oct-2022/sample_submission.csv')\nfinalsub.sort_values(by=['id'], inplace=True)\nfinalsub['team_A_scoring_within_10sec'] = sub['team_A_scoring_within_10sec']\nfinalsub['team_B_scoring_within_10sec'] = sub['team_B_scoring_within_10sec']","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"print('Scaled mean prob for A: ', sub['team_A_scoring_within_10sec'].mean())\nprint('Scaled mean prob for B: ', sub['team_B_scoring_within_10sec'].mean())","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"finalsub.to_csv('submission.csv', index=False)\nfinalsub.head(10)","metadata":{},"execution_count":null,"outputs":[]}]}