import%20marimo%0A%0A__generated_with%20%3D%20%220.11.20%22%0Aapp%20%3D%20marimo.App(width%3D%22medium%22)%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_()%3A%0A%20%20%20%20%23%20Relevant%20Imports%0A%0A%20%20%20%20import%20marimo%20as%20mo%0A%0A%20%20%20%20import%20numpy%20as%20np%0A%20%20%20%20import%20pandas%20as%20pd%0A%20%20%20%20import%20statsmodels.formula.api%20as%20smf%0A%20%20%20%20from%20sklearn.ensemble%20import%20GradientBoostingRegressor%2C%20GradientBoostingClassifier%0A%20%20%20%20from%20sklearn.model_selection%20import%20cross_val_predict%0A%20%20%20%20from%20stargazer.stargazer%20import%20Stargazer%0A%20%20%20%20import%20graphviz%0A%20%20%20%20from%20IPython.display%20import%20display%2C%20HTML%0A%20%20%20%20import%20os%0A%0A%20%20%20%20try%3A%0A%20%20%20%20%20%20%20%20os.chdir(%22assets%2Farticles%2Fnotebooks%22)%0A%20%20%20%20except%3A%0A%20%20%20%20%20%20%20%20pass%0A%20%20%20%20return%20(%0A%20%20%20%20%20%20%20%20GradientBoostingClassifier%2C%0A%20%20%20%20%20%20%20%20GradientBoostingRegressor%2C%0A%20%20%20%20%20%20%20%20HTML%2C%0A%20%20%20%20%20%20%20%20Stargazer%2C%0A%20%20%20%20%20%20%20%20cross_val_predict%2C%0A%20%20%20%20%20%20%20%20display%2C%0A%20%20%20%20%20%20%20%20graphviz%2C%0A%20%20%20%20%20%20%20%20mo%2C%0A%20%20%20%20%20%20%20%20np%2C%0A%20%20%20%20%20%20%20%20os%2C%0A%20%20%20%20%20%20%20%20pd%2C%0A%20%20%20%20%20%20%20%20smf%2C%0A%20%20%20%20)%0A%0A%0A%40app.cell%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(%0A%20%20%20%20%20%20%20%20%22%22%22%0A%20%20%20%20%20%20%20%20%23%20Double%20Machine%20Learning%2C%20Simplified%3A%20Part%201%20-%20Basic%20Causal%20Inference%20Applications%20%0A%20%20%20%20%20%20%20%20%3Ccenter%3E%20**Learn%20how%20to%20utilize%20DML%20in%20causal%20inference%20tasks**%20%3C%2Fcenter%3E%0A%20%20%20%20%20%20%20%20%22%22%22%0A%20%20%20%20)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(%0A%20%20%20%20%20%20%20%20r%22%22%22%0A%20%20%20%20%20%20%20%20%23%23%20Introduction%0A%0A%20%20%20%20%20%20%20%20%3E%20This%20article%20is%20the%20**1st**%20in%20a%202%20part%20series%20on%20simplifying%20and%20democratizing%20Double%20Machine%20Learning%20-%20specifically%20focusing%20on%20the%20partially%20linear%20model%20formulation.%20In%20the%201st%20part%2C%20we%20will%20be%20covering%20the%20fundamentals%20of%20Double%20Machine%20Learning%2C%20along%20with%20two%20basic%20causal%20inference%20applications%20in%20python.%20Then%2C%20in%20%3Ca%20href%3D%22%2Farticles%2Fdml2%22%20target%3D%22_blank%22%20rel%3D%22noopener%20noreferrer%22%3Ept.%202%3C%2Fa%3E%2C%20we%20will%20extend%20this%20knowledge%20to%20turn%20our%20Causal%20Inference%20problem%20into%20a%20prediction%20task%2C%20wherein%20we%20predict%20individual%20level%20treatment%20effects%20to%20aid%20in%20decision%20making%20and%20data-driven%20targeting.%0A%0A%20%20%20%20%20%20%20%20The%20conceptual%20%26%20practical%20distinctions%20between%20statistical%2Fmachine%20learning%20(ML)%20and%20causal%20inference%2Feconometric%20(CI)%20tasks%20have%20been%20established%20for%20years%E2%80%94%20ML%20seeks%20to%20predict%2C%20whereas%20CI%20seeks%20to%20infer%20a%20treatment%20effect%20or%20a%20%22causal%22%20relationship%20between%20variables.%20However%2C%20it%20was%2C%20and%20still%20is%2C%20common%20for%20the%20data%20scientist%20to%20draw%20causal%20conclusions%20from%20parameters%20of%20a%20trained%20machine%20learning%20model%2C%20or%20some%20other%20interpretable%20ML%20methodology.%20Despite%20this%2C%20there%20has%20been%20significant%20strides%20in%20industry%20and%20across%20many%20academic%20disciplines%20to%20push%20more%20rigorousness%20in%20making%20causal%20claims%2C%20and%20this%20has%20stimulated%20a%20much%20wider%20and%20open%20discourse%20on%20CI.%20In%20this%20stride%2C%20we%20have%20seen%20amazing%20work%20come%20out%20that%20has%20begun%20to%20bridge%20the%20conceptual%20gap%20between%20ML%20and%20CI%2C%20specifically%20tools%20in%20CI%20that%20take%20advantage%20of%20the%20power%20of%20ML%20methodologies.%0A%0A%20%20%20%20%20%20%20%20The%20primary%20motivation%20for%20this%20series%20is%20to%20democratize%20the%20usage%20of%20%26%20applications%20of%20Double%20Machine%20Learning%20(DML)%2C%20first%20introduced%20by%20_Chernozhukov%20et%20al._%20in%20their%20pioneering%20paper%20%22Double%20Machine%20Learning%20for%20Treatment%20and%20Causal%20Parameters%22%2C%20and%20to%20enable%20the%20data%20scientist%20to%20utilize%20DML%20in%20their%20daily%20causal%20inference%20tasks.%5B1%5D%20In%20doing%20so%2C%20we%20will%20first%20dive%20into%20the%20fundamentals%20of%20DML.%20Specifically%2C%20we%20will%20cover%20some%20of%20the%20conceptual%2Ftheoretical%20underpinnings%2C%20including%20the%20regression%20framework%20for%20causality%20%26%20the%20Frisch-Waugh-Lovell%20Theorem%2C%20and%20then%20we%20will%20use%20this%20framework%20to%20develop%20DML.%20Lastly%2C%20we%20will%20demonstrate%20two%20notable%20applications%20of%20Double%20Machine%20Learning%3A%0A%0A%20%20%20%20%20%20%20%201.%20Converging%20towards%20Exogeneity%2FCIA%2FIgnorability%20in%20our%20Treatment%20given%20Non-Experimental%2FObservational%20Data%20(particularly%20when%20our%20set%20of%20covariates%20is%20of%20high%20dimensionality)%2C%20and%0A%0A%20%20%20%20%20%20%20%202.%20Improving%20Precision%20%26%20Statistical%20Power%20in%20Experimental%20Data%20(Randomized%20Controlled%20Trial%E2%80%99s%20(RCTs)%20or%20A%2FB%20Tests)%0A%0A%20%20%20%20%20%20%20%20If%20this%20already%20all%20feels%20extremely%20foreign%2C%20I%20recommend%20checking%20out%20my%20%3Ca%20href%3D%22%2Farticles%2Ffwl%22%20target%3D%22_blank%22%20rel%3D%22noopener%20noreferrer%22%3Eprevious%20article%3C%2Fa%3E%20that%20covers%20the%20regression%20framework%20for%20causality%20and%20the%20Frisch-Waugh-Lovell%20Theorem.%20Nevertheless%2C%20I%20will%20cover%20these%20topic%20below%20and%20do%20my%20best%20to%20simplify%20and%20make%20this%20accessible%20to%20all.%20Let%E2%80%99s%20first%20dive%20into%20a%20quick%20overview%20of%20these%20theoretical%20underpinnings!%0A%0A%20%20%20%20%20%20%20%20%3E%20Note%3A%20This%20article%20focuses%20on%20the%20partially%20linear%20model%20formulation%20of%20double%20machine%20learning.%20The%20theoretical%20underpinnings%20of%20DML%20are%20quite%20generalizable%20and%20extremely%20powerful.%20We%20will%20give%20the%20theory%20a%20more%20rigorous%20treatment%20in%20a%20future%20post!%0A%0A%20%20%20%20%20%20%20%20%23%23%20Regression%20Framework%20for%20Causality%20%26%20the%20FWL%20Theorem%0A%0A%20%20%20%20%20%20%20%20The%20gold%20standard%20for%20establishing%20causality%20is%20an%20RCT%20or%20A%2FB%20test%2C%20wherein%20we%20randomly%20assign%20a%20subset%20of%20individuals%20to%20receive%20treatment%2C%20T%2C%20(the%20test%20group)%20and%20others%20to%20not%20receive%20treatment%20(the%20control%20group)%2C%20or%20a%20different%20treatment%20(in%20%E2%80%9CA%2FB%E2%80%9D%20testing).%20To%20estimate%20the%20average%20treatment%20effect%20(ATE)%20of%20treatment%20on%20outcome%20y%2C%20we%20can%20estimate%20the%20following%20bivariate%20linear%20regression%3A%0A%0A%20%20%20%20%20%20%20%20%24%24%0A%20%20%20%20%20%20%20%20%5Cbegin%7Bequation%7D%0A%20%20%20%20%20%20%20%20y%20%3D%20%5Cbeta_0%20%2B%20%5Cbeta_1T%20%2B%5Cepsilon%20%0A%20%20%20%20%20%20%20%20%5Ctag%7B1%7D%0A%20%20%20%20%20%20%20%20%5Cend%7Bequation%7D%0A%20%20%20%20%20%20%20%20%24%24%0A%0A%20%20%20%20%20%20%20%20Because%20treatment%20is%20randomly%20assigned%2C%20we%20ensure%20that%20treatment%20is%20exogenous%3B%20that%20is%2C%20independent%20of%20the%20error%20term%2C%20%24%5Cepsilon%24%2C%20and%20thus%20there%20exists%20not%20confounders%20(a%20variable%20that%20effects%20both%20treatment%20and%20the%20outcome)%20that%20we%20have%20not%20controlled%20for%E2%80%94%20%24%5Ctext%7Bcov%7D(T%2C%5Cepsilon)%3D0%24%20(e.g.%2C%20suppose%2C%20as%20a%20violation%2C%20%24y%3D%5Ctext%7Bearnings%7D%24%20%26%20%24T%3D%5Ctext%7Byears%20of%20education%7D%24%2C%20then%20we%20can%20anticipate%20a%20variable%20such%20as%20%24%5Ctext%7BIQ%7D%24%20in%20%24%5Cepsilon%24%20to%20confound%20the%20true%20relationship).%20Because%20of%20this%20independence%2C%20the%20coefficient%20estimate%20on%20%24T%24%20takes%20on%20a%20causal%20interpretation%20%E2%80%94%20the%20ATE%3A%0A%0A%20%20%20%20%20%20%20%20%24%24%0A%20%20%20%20%20%20%20%20%5Cbegin%7Bequation%7D%0A%20%20%20%20%20%20%20%20%5Ctext%7BATE%7D%3D%5Cmathbb%7BE_n%7D%5By(T%3D1)-y(T%3D0)%5D%3D%5Cmathbb%7BE%7D%5B(%5Cbeta_0%2B%5Cbeta_1)-%5Cbeta_0%5D%3D%5Cbeta_1%20%0A%20%20%20%20%20%20%20%20%5Ctag%7B2%7D%0A%20%20%20%20%20%20%20%20%5Cend%7Bequation%7D%0A%20%20%20%20%20%20%20%20%24%24%0A%0A%20%20%20%20%20%20%20%20%24%24%0A%20%20%20%20%20%20%20%20%5Cbegin%7Bequation%7D%0A%20%20%20%20%20%20%20%20%5Ctext%7BATE%7D%3D%5Cmathbb%7BE_n%7D%5Cleft%5B%5Cfrac%7B%5Cpartial%20y%7D%7B%5Cpartial%20T%7D%5Cright%5D%3D%5Cbeta_1%20%0A%20%20%20%20%20%20%20%20%5Ctag%7B3%7D%0A%20%20%20%20%20%20%20%20%5Cend%7Bequation%7D%0A%20%20%20%20%20%20%20%20%24%24%0A%0A%20%20%20%20%20%20%20%20When%20we%20are%20dealing%20with%20non-experimental%20or%20observational%20data%2C%20it%20is%20almost%20always%20the%20case%20that%20the%20treatment%20of%20interest%20is%20not%20independent%20of%20%24%5Cepsilon%24%2C%20or%20endogenous%20%E2%80%94%20%24%5Ctext%7Bcov%7D(T%2C%5Cepsilon)%20%5Cne%200%24%2C%20and%20there%20exists%20confounders%20that%20we%20have%20not%20accounted%20for.%20In%20other%20words%2C%20we%20no%20longer%20can%20parse%20out%20the%20true%20random%20variation%20in%20our%20treatment%20to%20explain%20our%20outcome.%20In%20this%20case%2C%20a%20simple%20bivariate%20regression%20will%20result%20in%20a%20biased%20estimate%20of%20the%20ATE%20(%5Cbeta%20(true%20ATE)%20%2B%20bias)%20due%20to%20%5Bomitted%20variable%20bias%5D(https%3A%2F%2Fen.wikipedia.org%2Fwiki%2FOmitted-variable_bias).%20However%2C%20if%20we%20can%20control%20for%20all%20possible%20confounders%2C%20%24X%24%2C%20and%20the%20confounding%20functional%20form%20if%20using%20parametric%20models%2C%20we%20can%20achieve%20exogeneity%20in%20our%20treatment%2C%20or%20what%20is%20also%20known%20as%20the%20conditional%20independence%20assumption%20(CIA)%2C%20or%20Ignorability.%20In%20other%20words%20again%2C%20the%20remaining%20variation%20in%20our%20treatment%20is%20%E2%80%9Cas%20good%20as%20random%E2%80%9D.%20That%20is%2C%20there%20are%20no%20remaining%20confounders%20in%20the%20error%20term%2C%20or%3A%0A%0A%20%20%20%20%20%20%20%20%24%24%0A%20%20%20%20%20%20%20%20%5Cbegin%7Bequation%7D%0A%20%20%20%20%20%20%20%20%5Ctext%7Bcov%7D(T%2C%5Cepsilon%7C%5Cmathbf%7BX%7D)%3D0%0A%20%20%20%20%20%20%20%20%5Ctag%7B4%7D%0A%20%20%20%20%20%20%20%20%5Cend%7Bequation%7D%0A%20%20%20%20%20%20%20%20%24%24%0A%0A%20%20%20%20%20%20%20%20If%20exogeneity%20holds%20(there%20are%20no%20confounders%20outside%20of%20%24X%24)%2C%20then%20controlling%20for%20%24X%24%20in%20a%20multiple%20regression%20allows%20for%20the%20coefficient%20estimate%20on%20%24T%24%20to%20take%20on%20the%20similar%20causal%20interpretation%20of%20the%20ATE%3A%0A%0A%20%20%20%20%20%20%20%20%24%24%0A%20%20%20%20%20%20%20%20%5Cbegin%7Bequation%7D%0A%20%20%20%20%20%20%20%20y%3D%5Cbeta_0%20%2B%20%5Cbeta_1T%20%2B%20%5Cmathbf%7BX%7D%5Cmathbf%7B%5COmega%7D%2B%5Cepsilon%0A%20%20%20%20%20%20%20%20%5Ctag%7B5%7D%0A%20%20%20%20%20%20%20%20%5Cend%7Bequation%7D%0A%20%20%20%20%20%20%20%20%24%24%0A%0A%20%20%20%20%20%20%20%20%3E%20**Warning%3A**%20It%20is%20not%20best%20practice%20to%20control%20for%20every%20possible%20covariate%2C%20but%20rather%20variables%20that%20are%20hypothesized%2Fknown%20to%20influence%20both%20the%20outcome%2C%20%24y%24%2C%20and%20treatment%20of%20interest%2C%20%24T%24.%20This%20is%20the%20concept%20of%20a%20%5Bconfounder%5D(https%3A%2F%2Fen.wikipedia.org%2Fwiki%2FConfounding).%20Conversely%2C%20if%20both%20%24y%24%20and%20%24T%24%20influence%20a%20variable%2C%20we%20do%20not%20want%20to%20control%20for%20this%20variable%2C%20as%20this%20can%20introduce%20a%20spurious%20association%20between%20%24y%24%20and%20%24T%24.%20This%20is%20the%20concept%20of%20a%20%5Bcollider%20variable%5D(https%3A%2F%2Fen.wikipedia.org%2Fwiki%2FCollider_(statistics)).%20We%20will%20show%20an%20example%20of%20this%20in%20action%20further%20in%20this%20article.%20Additionally%2C%20we%20do%20not%20want%20to%20include%20variables%20that%20are%20mediators%20of%20our%20treatment%3B%20that%20is%2C%20a%20covariate%20that%20is%20impacted%20by%20the%20treatment%20that%20in%20turn%20impacts%20the%20outcome.%20The%20inclusion%20of%20this%20mediator%20variable%20can%20eat%20away%20at%20the%20estimate%20of%20our%20treatment%20effect.%20In%20short%2C%20we%20only%20want%20to%20include%20confounders%20(and%2C%20possibly%2C%20non-mediator%20%26%20non-collider%20predictors%20of%20%24y%24%20to%20improve%20precision%3B%20this%20is%20discussed%20in%20example%202%20below).%0A%0A%20%20%20%20%20%20%20%20However%2C%20in%20practice%2C%20exogeneity%2FCIA%2FIgnorability%20is%20very%20difficult%20to%20obtain%20and%20justify%20as%20it%20is%20unlikely%20that%20we%20will%20be%20able%20to%20observe%20every%20confounder%20and%20control%20for%20potential%20non-linear%20relationships%20these%20confounders%20may%20take%20on.%20This%20provides%20one%20particular%20motivation%20for%20DML%20%E2%80%94%20however%2C%20let%E2%80%99s%20first%20discuss%20the%20FWL%20theorem%2C%20as%20this%20allows%20us%20to%20theoretically%20develop%20DML.%0A%0A%20%20%20%20%20%20%20%20The%20%5BFWL%20theorem%5D(https%3A%2F%2Fen.wikipedia.org%2Fwiki%2FFrisch%25e2%2580%2593Waugh%25e2%2580%2593Lovell_theorem)%20is%20a%20notable%20econometric%20theorem%20that%20allows%20us%20to%20obtain%20the%20identical%20ATE%20parameter%20estimate%2C%20%24%5Cbeta%24%E2%82%81%2C%20on%20the%20treatment%2C%20%24T%24%2C%20in%20the%20multiple%20regression%20above%20(eq.%205)%20utilizing%20the%20following%203%20step%20procedure%3A%0A%0A%20%20%20%20%20%20%20%201.%20Separately%20regress%20%24y%24%20on%20%24X%24%20and%20%24T%24%20on%20%24X%24%0A%20%20%20%20%20%20%20%202.%20Save%20the%20residuals%20from%20step%201%E2%80%94%20call%20it%20%24y%5E*%24%20and%20%24T%5E*%24%0A%20%20%20%20%20%20%20%203.%20Regress%20%24y%5E*%24%20on%20%24T%5E*%24%0A%0A%20%20%20%20%20%20%20%20In%20psuedo-python%20code%2C%0A%0A%20%20%20%20%20%20%20%20%60%60%60python%0A%20%20%20%20%20%20%20%20import%20statsmodels.formula.api%20as%20smf%0A%0A%20%20%20%20%20%20%20%20reg_y%20%3D%20smf.ols(formula%3D'y%20~%201%20%2B%20X'%2C%20data%20%3D%20df).fit()%0A%20%20%20%20%20%20%20%20reg_T%20%3D%20smf.ols(formula%3D'T%20~%201%20%2B%20X'%2C%20data%20%3D%20df).fit()%0A%0A%20%20%20%20%20%20%20%20y_residual%20%3D%20reg_y.resid%0A%20%20%20%20%20%20%20%20T_residual%20%3D%20reg_T.resid%0A%0A%20%20%20%20%20%20%20%20ATE_model%20%3D%20smf.ols(formula%3D'y_residual%20~%201%20%2B%20T_residual'%2C%20data%20%3D%20df).fit()%0A%20%20%20%20%20%20%20%20%60%60%60%0A%0A%20%20%20%20%20%20%20%20Intuitively%2C%20the%20FWL%20theorem%20partials%20out%20the%20variation%20in%20T%20and%20y%20that%20is%20explained%20by%20the%20confounders%2C%20X%2C%20and%20then%20uses%20the%20remaining%20variation%20to%20explain%20the%20key%20relationship%20of%20interest%20(ie%2C%20how%20T%20effects%20y).%20More%20specifically%2C%20it%20exploits%20a%20special%20type%20of%20orthogonal%20projection%20matrix%20of%20X%20known%20as%20an%20annihilator%20matrix%20or%20residual-maker%20matrix%20to%20residualize%20T%20and%20y.%20For%20a%20hands-on%20application%20of%20the%20FWL%20procedure%2C%20see%20my%20%3Ca%20href%3D%22%2Farticles%2Ffwl%22%20target%3D%22_blank%22%20rel%3D%22noopener%20noreferrer%22%3Eprevious%20port%3C%2Fa%3E.%20This%20theorem%20is%20pivotal%20in%20understanding%20DML.%0A%0A%20%20%20%20%20%20%20%20%3E%20Note%20that%20I%20have%20(intentionally)%20glossed%20over%20some%20additional%20causal%20inference%20assumptions%2C%20such%20as%20Positivity%2FCommon%20Support%20%26%20SUTVA%2FCounterfactual%20Consistency.%20In%20general%2C%20the%20CIA%2FIgnorability%20assumption%20is%20the%20most%20common%20assumption%20that%20needs%20to%20be%20defended.%20However%2C%20it%20is%20recommended%20that%20the%20interested%20reader%20familiarize%20themselves%20with%20the%20additional%20assumptuons.%20In%20brief%2C%20Positivity%20ensures%20we%20have%20non-treated%20households%20that%20are%20similar%20%26%20comparable%20to%20treated%20households%20to%20enable%20counterfactual%20estimation%20(e.g.%2C%20treatment%20is%20non-deterministic%20and%20every%20household%20has%20a%20non%20zero%20probability%20of%20receiving%20treatment)%20%26%20SUTVA%20ensures%20there%20is%20no%20spillover%2Fnetwork%20type%20effects%20(treatment%20of%20one%20individual%20impacts%20another).%0A%0A%20%20%20%20%20%20%20%20%23%23%20Double%20Machine%20Learning...%20Simplified!%0A%0A%20%20%20%20%20%20%20%20Double%20Machine%20Learning%2C%20at%20its%20core%2C%20allows%20for%20the%20residualization%2Forthogonalization%20done%20in%20steps%201)%20and%202)%20of%20the%20FWL%20procedure%20to%20be%20conducted%20using%20any%20highly%20flexible%20ML%20model%2C%20thus%20constructing%20a%20_partially%20linear%20model_.%20That%20is%2C%20we%20can%20estimate%20the%20ATE%20via%3A%0A%0A%20%20%20%20%20%20%20%20%24%24%0A%20%20%20%20%20%20%20%20%5Cbegin%7Bequation%7D%0A%20%20%20%20%20%20%20%20y-%5Cmathcal%7BM%7D_y(%5Cmathbf%7BX%7D)%3D%5Cbeta_0%2B%5Cbeta_1(T-%5Cmathcal%7BM%7D_T(%5Cmathbf%7BX%7D))%2B%5Cepsilon%20%0A%20%20%20%20%20%20%20%20%5Ctag%7B6%7D%0A%20%20%20%20%20%20%20%20%5Cend%7Bequation%7D%0A%20%20%20%20%20%20%20%20%24%24%0A%0A%20%20%20%20%20%20%20%20where%20%24%5Cmathcal%7BM%7D_y%24%20and%20%24%5Cmathcal%7BM%7D_T%24%20are%20both%20any%20ML%20models%20to%20predict%20%24y%24%20and%20%24T%24%20given%20confounders%20and%2For%20controls%2C%20X%2C%20respectively.%20%24%5Cmathcal%7BM%7D_y%24%20and%20%24%5Cmathcal%7BM%7D_T%24%20are%20also%20known%20as%20the%20%E2%80%9Cnuisance%20functions%E2%80%9D%20as%20we%20are%20constructing%20functions%20to%20partial%20out%20the%20variation%20in%20%24y%24%20and%20%24T%24%20explained%20by%20%24X%24%20as%20a%20means%20to%20estimating%20%24%5Cbeta_1%24%2C%20and%20thus%20are%20not%20of%20primary%20interest.%20To%20avoid%20overfitting%20and%20to%20ensure%20robustness%20in%20this%20approach%2C%20we%20use%20_cross-validation%20prediction_%20via%20cross-fitting.%20I%20believe%20it%20will%20be%20useful%20again%20here%20to%20see%20this%20procedure%20outlined%20in%20pseudo-python%20code%3A%0A%0A%20%20%20%20%20%20%20%20%60%60%60python%0A%20%20%20%20%20%20%20%20from%20sklearn.model_selection%20import%20cross_val_predict%0A%20%20%20%20%20%20%20%20import%20statsmodels.formula.api%20as%20smf%0A%0A%20%20%20%20%20%20%20%20M_y%20%3D%20*some%20ML%20model*%0A%20%20%20%20%20%20%20%20M_T%20%3D%20*some%20ML%20model*%0A%0A%20%20%20%20%20%20%20%20y_residual%20%3D%20df%5By%5D%20-%20cross_val_predict(M_y%2C%20df%5BX%5D%2C%20df%5By%5D%2C%20cv%3D3)%0A%20%20%20%20%20%20%20%20T_residual%20%3D%20df%5BT%5D%20-%20cross_val_predict(M_T%2C%20df%5BX%5D%2C%20df%5BT%5D%2C%20cv%3D3)%0A%0A%20%20%20%20%20%20%20%20ATE_model%20%3D%20smf.ols(formula%3D'y_residual%20~%201%20%2B%20T_residual'%2C%20data%20%3D%20df).fit()%0A%20%20%20%20%20%20%20%20%60%60%60%0A%0A%20%20%20%20%20%20%20%20Where%20the%20coefficient%20on%20%60T_residual%60%20will%20be%20our%20estimated%20ATE%2C%20with%20asymptotically%20normal%20inference%20around%20our%20estimate.%20And%2C%20that%E2%80%99s%20it!%0A%0A%20%20%20%20%20%20%20%20I%20will%20not%20dive%20too%20deep%20into%20the%20technicalities%20of%20why%20this%20works%2C%20and%20I%20will%20refer%20the%20interested%20reader%20to%20the%20%5Boriginal%20paper%5D(https%3A%2F%2Farxiv.org%2Fpdf%2F1608.00060)%20and%20%5BEconML%20documentation%5D(https%3A%2F%2Feconml.azurewebsites.net%2Findex.html).%20However%2C%20in%20brief%2C%20DML%20satisfies%20a%20condition%20known%20as%20Neyman%20Orthogonality%20(ie%2C%20small%20perturbations%20in%20the%20nuisance%20functions%20around%20the%20true%20value%20has%20second%20order%20effects%20on%20the%20moment%20condition%20and%20thus%20does%20not%20impact%20our%20key%20parameter%20estimate)%2C%20which%20solves%20for%20regularization%20bias%2C%20and%20when%20combined%20with%20the%20cross-validation%20procedure%20in%20DML%2C%20which%20solves%20for%20overfitting%20bias%2C%20we%20ensure%20robustness%20in%20this%20method.%0A%0A%20%20%20%20%20%20%20%20There%20are%20some%20very%20cool%20extensions%20on%20DML%20that%20will%20be%20covered%20in%20part%202%20of%20the%20series%2C%20but%20for%20now%20let%E2%80%99s%20see%20this%20in%20action%20via%20two%20applications.%0A%0A%20%20%20%20%20%20%20%20%23%23%20DML%20Applications%0A%0A%20%20%20%20%20%20%20%20%23%23%23%20**Application%201%3A**%20_Converging%20towards%20Exogeneity%2FCIA%2FIgnorability%20in%20our%20Treatment%20given%20Non-Experimental%2FObservational%20Data_%0A%0A%20%20%20%20%20%20%20%20Recall%20that%20we%20discussed%20how%20in%20the%20absence%20of%20randomized%20experimental%20data%20we%20must%20control%20for%20all%20potential%20confounders%20to%20ensure%20we%20obtain%20exogeneity%20in%20our%20treatment%20of%20interest.%20In%20other%20words%2C%20when%20we%20control%20for%20all%20potential%20confounders%2C%20our%20treatment%20is%20%E2%80%9Cas%20good%20as%20randomly%20assigned%E2%80%9D.%20There%20are%20two%20primary%20problems%20that%20still%20persist%20here%3A%0A%0A%20%20%20%20%20%20%20%201.%20It%20is%20difficult%2C%20and%20impossible%20in%20some%20cases%2C%20to%20truly%20know%20all%20of%20the%20confounders%20and%2C%20furthermore%2C%20to%20obtain%20the%20data%20for%20all%20these%20confounders.%20Solutioning%20this%20involves%20strong%20institutional%20knowledge%20of%20the%20data%20generating%20process%2C%20careful%20construction%20of%20the%20causal%20model%20(i.e.%2C%20building%20a%20%5BDAG%5D(https%3A%2F%2Fen.wikipedia.org%2Fwiki%2FDirected_acyclic_graph)%20while%20evaluating%20potential%20confounders%20and%20avoiding%20colliders)%2C%20and%2For%20exploiting%20%5Bquasi-experimental%5D(https%3A%2F%2Fen.wikipedia.org%2Fwiki%2FQuasi-experiment)%20designs.%0A%0A%20%20%20%20%20%20%20%202.%20If%20we%20do%20take%20manage%20to%20take%20care%20of%20point%201%2C%20we%20still%20have%20to%20specify%20the%20correct%20parametric%20form%20of%20confounding%2C%20including%20interactions%20and%20higher-order%20terms%2C%20when%20utilizing%20a%20parametric%20model%20(such%20as%20in%20the%20regression%20framework).%20Simply%20including%20linear%20terms%20in%20a%20regression%20may%20not%20sufficiently%20control%20for%20the%20confounding.%20This%20is%20where%20DML%20steps%20in%3B%20it%20can%20flexibly%20partial%20out%20the%20confounding%20in%20a%20highly%20non-parametric%20fashion.%20This%20is%20particularly%20beneficial%20in%20saving%20the%20data%20scientist%20the%20trouble%20of%20directly%20modeling%20the%20functional%20forms%20of%20confounding%2C%20and%20allows%20more%20attention%20to%20be%20directed%20towards%20identifying%20and%20measuring%20the%20confounders.%20Let%E2%80%99s%20see%20how%20this%20works!%0A%0A%20%20%20%20%20%20%20%20Suppose%2C%20as%20a%20highly%20stylized%20example%2C%20we%20work%20for%20an%20e-commerce%20company%20and%20we%20are%20tasked%20with%20estimating%20the%20ATE%20of%20an%20individuals%20time%20spent%20on%20the%20website%20on%20their%20purchase%20amount%2C%20or%20sales%2C%20in%20the%20past%20month.%20However%2C%20further%20assume%20we%20only%20have%20observational%20data%20to%20work%20with%2C%20but%20we%20have%20measured%20all%20potential%20confounders%20(those%20variables%20that%20influence%20both%20time%20spent%20on%20the%20website%20and%20sales).%20Let%20this%20causal%20process%20be%20outlined%20via%20the%20following%20Directed%20Acyclic%20Graph%20(DAG)%3A%0A%20%20%20%20%20%20%20%20%22%22%22%0A%20%20%20%20)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(graphviz%2C%20mo)%3A%0A%20%20%20%20def%20create_dag1()%3A%0A%20%20%20%20%20%20%20%20%23%20Create%20a%20directed%20graph%0A%20%20%20%20%20%20%20%20g%20%3D%20graphviz.Digraph(format%3D%22png%22)%0A%0A%20%20%20%20%20%20%20%20%23%20Add%20nodes%0A%20%20%20%20%20%20%20%20nodes%20%3D%20%5B%0A%20%20%20%20%20%20%20%20%20%20%20%20%22Age%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22%23%20Social%20Media%20Accounts%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22Yrs%20Member%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22Time%20on%20Website%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22Sales%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22Z%22%2C%0A%20%20%20%20%20%20%20%20%5D%0A%20%20%20%20%20%20%20%20%5Bg.node(n)%20for%20n%20in%20nodes%5D%0A%0A%20%20%20%20%20%20%20%20g.edge(%22Age%22%2C%20%22Time%20on%20Website%22)%0A%20%20%20%20%20%20%20%20g.edge(%22%23%20Social%20Media%20Accounts%22%2C%20%22Time%20on%20Website%22)%0A%20%20%20%20%20%20%20%20g.edge(%22Yrs%20Member%22%2C%20%22Time%20on%20Website%22)%0A%20%20%20%20%20%20%20%20g.edge(%22Age%22%2C%20%22Sales%22)%0A%20%20%20%20%20%20%20%20g.edge(%22%23%20Social%20Media%20Accounts%22%2C%20%22Sales%22)%0A%20%20%20%20%20%20%20%20g.edge(%22Yrs%20Member%22%2C%20%22Sales%22)%0A%20%20%20%20%20%20%20%20g.edge(%22Time%20on%20Website%22%2C%20%22Sales%22%2C%20color%3D%22red%22)%0A%20%20%20%20%20%20%20%20g.edge(%22Z%22%2C%20%22Sales%22)%0A%0A%20%20%20%20%20%20%20%20g.graph_attr%5B%22dpi%22%5D%20%3D%20%22200%22%0A%0A%20%20%20%20%20%20%20%20g.render(%22data%2Fdag1%22%2C%20format%3D%22webp%22)%0A%0A%20%20%20%20create_dag1()%0A%20%20%20%20mo.image(%22data%2Fdag1.webp%22).center()%0A%20%20%20%20return%20(create_dag1%2C)%0A%0A%0A%40app.cell%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(%22%22%22Let%20the%20data%20generating%20process%20be%20as%20follows%20(_note%20that%20all%20values%20%26%20data%20are%20chosen%20and%20generated%20arbitrarily%20for%20demonstrative%20purposes%2C%20and%20thus%20should%20not%20necessarily%20represent%20a%20large%20degree%20of%20real%20world%20intuition%20per%20se%20outside%20of%20our%20estimates%20of%20the%20ATE_)%3A%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(np%2C%20pd)%3A%0A%20%20%20%20N%20%3D%20100_000%0A%0A%20%20%20%20%23%20Confounders%0A%20%20%20%20age%20%3D%20np.random.randint(low%3D18%2C%20high%3D75%2C%20size%3DN)%0A%20%20%20%20num_social_media_profiles%20%3D%20np.random.choice(%0A%20%20%20%20%20%20%20%20%5B0%2C%201%2C%202%2C%203%2C%204%2C%205%2C%206%2C%207%2C%208%2C%209%2C%2010%5D%2C%20size%3DN%0A%20%20%20%20)%0A%20%20%20%20yr_membership%20%3D%20np.random.choice(%5B0%2C%201%2C%202%2C%203%2C%204%2C%205%2C%206%2C%207%2C%208%2C%209%2C%2010%5D%2C%20size%3DN)%0A%0A%20%20%20%20%23%20Additional%20Covariates%20(Arbitrary%20Z)%0A%20%20%20%20Z%20%3D%20np.random.normal(loc%3D50%2C%20scale%3D25%2C%20size%3DN)%0A%0A%20%20%20%20%23%20Error%20Terms%0A%20%20%20%20%CE%B51%20%3D%20np.random.normal(loc%3D20%2C%20scale%3D5%2C%20size%3DN)%0A%20%20%20%20%CE%B52%20%3D%20np.random.normal(loc%3D40%2C%20scale%3D15%2C%20size%3DN)%0A%0A%20%20%20%20%23%20Treatment%20DGP%20(T%20%3D%20g(X)%20%2B%20%CE%B5)%20-%20Hrs%20spent%20on%20website%20in%20past%20month%0A%20%20%20%20time_on_website%20%3D%20np.maximum(%0A%20%20%20%20%20%20%20%20np.random.normal(loc%3D10%2C%20scale%3D5%2C%20size%3DN)%0A%20%20%20%20%20%20%20%20-%200.01%20*%20age%0A%20%20%20%20%20%20%20%20-%200.001%20*%20age**2%0A%20%20%20%20%20%20%20%20%2B%20num_social_media_profiles%0A%20%20%20%20%20%20%20%20-%200.01%20*%20num_social_media_profiles**2%0A%20%20%20%20%20%20%20%20-%200.01%20*%20(age%20*%20num_social_media_profiles)%0A%20%20%20%20%20%20%20%20%2B%200.2%20*%20yr_membership%0A%20%20%20%20%20%20%20%20%2B%200.001%20*%20yr_membership**2%0A%20%20%20%20%20%20%20%20-%200.01%20*%20(age%20*%20yr_membership)%0A%20%20%20%20%20%20%20%20%2B%200.2%20*%20(num_social_media_profiles%20*%20yr_membership)%0A%20%20%20%20%20%20%20%20%2B%200.01%0A%20%20%20%20%20%20%20%20*%20(num_social_media_profiles%20*%20np.log(age)%20*%20age%20*%20yr_membership%20**%20(1%20%2F%202))%0A%20%20%20%20%20%20%20%20%2B%20%CE%B51%2C%0A%20%20%20%20%20%20%20%200%2C%0A%20%20%20%20)%0A%0A%20%20%20%20%23%20Outcome%20DGP%20(y%20%3D%20f(T%2CX%2CZ)%20%2B%20%CE%B5)%20-%20Sales%20in%20past%20month%0A%20%20%20%20sales%20%3D%20np.maximum(%0A%20%20%20%20%20%20%20%20np.random.normal(loc%3D25%2C%20scale%3D10%2C%20size%3DN)%0A%20%20%20%20%20%20%20%20%2B%205%20*%20time_on_website%20%20%23%20Ground%20Truth%20ATE%20of%20%245%0A%20%20%20%20%20%20%20%20-%200.1%20*%20age%0A%20%20%20%20%20%20%20%20-%200.001%20*%20age**2%0A%20%20%20%20%20%20%20%20%2B%208%20*%20num_social_media_profiles%0A%20%20%20%20%20%20%20%20-%200.1%20*%20num_social_media_profiles**2%0A%20%20%20%20%20%20%20%20-%200.01%20*%20(age%20*%20num_social_media_profiles)%0A%20%20%20%20%20%20%20%20%2B%202%20*%20yr_membership%0A%20%20%20%20%20%20%20%20%2B%200.1%20*%20yr_membership**2%0A%20%20%20%20%20%20%20%20-%200.01%20*%20(age%20*%20yr_membership)%0A%20%20%20%20%20%20%20%20%2B%203%20*%20(num_social_media_profiles%20*%20yr_membership)%0A%20%20%20%20%20%20%20%20%2B%200.1%0A%20%20%20%20%20%20%20%20*%20(num_social_media_profiles%20*%20np.log(age)%20*%20age%20*%20yr_membership%20**%20(1%20%2F%202))%0A%20%20%20%20%20%20%20%20%2B%200.5%20*%20Z%0A%20%20%20%20%20%20%20%20%2B%20%CE%B52%2C%0A%20%20%20%20%20%20%20%200%2C%0A%20%20%20%20)%0A%0A%20%20%20%20collider%20%3D%20(%0A%20%20%20%20%20%20%20%20np.random.normal(loc%3D100%2C%20scale%3D50%2C%20size%3DN)%20%2B%202%20*%20sales%20%2B%207%20*%20time_on_website%0A%20%20%20%20)%0A%0A%20%20%20%20df%20%3D%20pd.DataFrame(%0A%20%20%20%20%20%20%20%20np.array(%0A%20%20%20%20%20%20%20%20%20%20%20%20%5B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20sales%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20time_on_website%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20age%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20num_social_media_profiles%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20yr_membership%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20Z%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20collider%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%5D%0A%20%20%20%20%20%20%20%20).T%2C%0A%20%20%20%20%20%20%20%20columns%3D%5B%0A%20%20%20%20%20%20%20%20%20%20%20%20%22sales%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22time_on_website%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22age%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22num_social_media_profiles%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22yr_membership%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22Z%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22collider%22%2C%0A%20%20%20%20%20%20%20%20%5D%2C%0A%20%20%20%20)%0A%20%20%20%20return%20(%0A%20%20%20%20%20%20%20%20N%2C%0A%20%20%20%20%20%20%20%20Z%2C%0A%20%20%20%20%20%20%20%20age%2C%0A%20%20%20%20%20%20%20%20collider%2C%0A%20%20%20%20%20%20%20%20df%2C%0A%20%20%20%20%20%20%20%20num_social_media_profiles%2C%0A%20%20%20%20%20%20%20%20sales%2C%0A%20%20%20%20%20%20%20%20time_on_website%2C%0A%20%20%20%20%20%20%20%20yr_membership%2C%0A%20%20%20%20%20%20%20%20%CE%B51%2C%0A%20%20%20%20%20%20%20%20%CE%B52%2C%0A%20%20%20%20)%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(df)%3A%0A%20%20%20%20df%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(%0A%20%20%20%20%20%20%20%20r%22%22%22%0A%20%20%20%20%20%20%20%20By%20construction%2C%20our%20treatment%20of%20interest%20(hours%20spent%20on%20the%20website%20in%20the%20past%20month)%20and%20our%20outcome%20(sales%20in%20the%20past%20month)%20have%20the%20following%20confounders%3A%20Age%2C%20Number%20of%20Social%20Media%20Accounts%2C%20%26%20Years%20Member%20of%20Website%2C%20and%20this%20confounding%20is%20arbitrarily%20non-linear.%20Furthermore%2C%20we%20can%20see%20that%20the%20constructed%20**ground%20truth%20for%20the%20ATE%20is%20%24**5%20(outlined%20in%20the%20DGP%20for%20sales%20in%20the%20code%20above%20above).%20That%20is%2C%20on%20average%2C%20for%20every%20additional%20hour%20the%20individual%20spends%20on%20the%20website%2C%20they%20spend%20an%20additional%20%245.%20Note%2C%20we%20also%20include%20a%20collider%20variable%20(a%20variable%20that%20is%20influenced%20by%20both%20time%20spent%20on%20the%20website%20and%20sales)%2C%20which%20will%20be%20utilized%20for%20demonstration%20below%20on%20how%20this%20biases%20the%20ATE.%0A%0A%20%20%20%20%20%20%20%20To%20demonstrate%20the%20ability%20of%20DML%20to%20flexibly%20partial%20out%20the%20highly%20non-linear%20confounding%2C%20we%20will%20run%20the%204%20following%20models%3A%0A%0A%20%20%20%20%20%20%20%201.%20Na%C3%AFve%20OLS%20of%20sales%20(%24y%24)%20on%20hours%20spent%20on%20the%20website%20(%24T%24)%0A%20%20%20%20%20%20%20%202.%20Multiple%20OLS%20of%20sales%20(%24y%24)%20on%20hours%20spent%20on%20the%20website%20(%24T%24)%20and%20linear%20terms%20of%20all%20of%20the%20confounders%0A%20%20%20%20%20%20%20%203.%20OLS%20utilizing%20DML%20residualization%20procedure%20outlined%20in%20eq.%20(5)%0A%20%20%20%20%20%20%20%204.%20OLS%20utilizing%20DML%20residualization%20procedure%2C%20including%20collider%20variable%0A%0A%20%20%20%20%20%20%20%20The%20code%20of%20this%20is%20as%20follows%3A%0A%20%20%20%20%20%20%20%20%22%22%22%0A%20%20%20%20)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(GradientBoostingRegressor%2C%20cross_val_predict%2C%20df%2C%20smf)%3A%0A%20%20%20%20%23%201%20-%20Naive%20OLS%0A%20%20%20%20naive_regression%20%3D%20smf.ols(formula%3D%22sales%20~%201%20%2B%20time_on_website%22%2C%20data%3Ddf).fit()%0A%0A%20%20%20%20%23%202%20-%20Multiple%20OLS%0A%20%20%20%20multiple_regression%20%3D%20smf.ols(%0A%20%20%20%20%20%20%20%20formula%3D%22sales%20~%201%20%2B%20time_on_website%20%2B%20age%20%2B%20num_social_media_profiles%20%2B%20yr_membership%22%2C%0A%20%20%20%20%20%20%20%20data%3Ddf%2C%0A%20%20%20%20).fit()%0A%0A%20%20%20%20%23%203%20-%20DML%20Procedure%0A%20%20%20%20M_sales%20%3D%20GradientBoostingRegressor()%0A%20%20%20%20M_time_on_website%20%3D%20GradientBoostingRegressor()%0A%0A%20%20%20%20df%5B%22residualized_sales%22%5D%20%3D%20df%5B%22sales%22%5D%20-%20cross_val_predict(%0A%20%20%20%20%20%20%20%20M_sales%2C%0A%20%20%20%20%20%20%20%20df%5B%5B%22age%22%2C%20%22num_social_media_profiles%22%2C%20%22yr_membership%22%5D%5D%2C%0A%20%20%20%20%20%20%20%20df%5B%22sales%22%5D%2C%0A%20%20%20%20%20%20%20%20cv%3D3%2C%0A%20%20%20%20)%0A%20%20%20%20df%5B%22residualized_time_on_website%22%5D%20%3D%20df%5B%22time_on_website%22%5D%20-%20cross_val_predict(%0A%20%20%20%20%20%20%20%20M_time_on_website%2C%0A%20%20%20%20%20%20%20%20df%5B%5B%22age%22%2C%20%22num_social_media_profiles%22%2C%20%22yr_membership%22%5D%5D%2C%0A%20%20%20%20%20%20%20%20df%5B%22time_on_website%22%5D%2C%0A%20%20%20%20%20%20%20%20cv%3D3%2C%0A%20%20%20%20)%0A%0A%20%20%20%20DML_model%20%3D%20smf.ols(%0A%20%20%20%20%20%20%20%20formula%3D%22residualized_sales%20~%201%20%2B%20residualized_time_on_website%22%2C%20data%3Ddf%0A%20%20%20%20).fit()%0A%0A%20%20%20%20%23%204%20-%20DML%20Procedure%20w%2F%20Collider%0A%20%20%20%20M_sales%20%3D%20GradientBoostingRegressor()%0A%20%20%20%20M_time_on_website%20%3D%20GradientBoostingRegressor()%0A%0A%20%20%20%20df%5B%22residualized_sales%22%5D%20%3D%20df%5B%22sales%22%5D%20-%20cross_val_predict(%0A%20%20%20%20%20%20%20%20M_sales%2C%0A%20%20%20%20%20%20%20%20df%5B%5B%22age%22%2C%20%22num_social_media_profiles%22%2C%20%22yr_membership%22%2C%20%22collider%22%5D%5D%2C%0A%20%20%20%20%20%20%20%20df%5B%22sales%22%5D%2C%0A%20%20%20%20%20%20%20%20cv%3D3%2C%0A%20%20%20%20)%0A%20%20%20%20df%5B%22residualized_time_on_website%22%5D%20%3D%20df%5B%22time_on_website%22%5D%20-%20cross_val_predict(%0A%20%20%20%20%20%20%20%20M_time_on_website%2C%0A%20%20%20%20%20%20%20%20df%5B%5B%22age%22%2C%20%22num_social_media_profiles%22%2C%20%22yr_membership%22%2C%20%22collider%22%5D%5D%2C%0A%20%20%20%20%20%20%20%20df%5B%22time_on_website%22%5D%2C%0A%20%20%20%20%20%20%20%20cv%3D3%2C%0A%20%20%20%20)%0A%0A%20%20%20%20DML_model_collider%20%3D%20smf.ols(%0A%20%20%20%20%20%20%20%20formula%3D%22residualized_sales%20~%201%20%2B%20residualized_time_on_website%22%2C%20data%3Ddf%0A%20%20%20%20).fit()%0A%20%20%20%20return%20(%0A%20%20%20%20%20%20%20%20DML_model%2C%0A%20%20%20%20%20%20%20%20DML_model_collider%2C%0A%20%20%20%20%20%20%20%20M_sales%2C%0A%20%20%20%20%20%20%20%20M_time_on_website%2C%0A%20%20%20%20%20%20%20%20multiple_regression%2C%0A%20%20%20%20%20%20%20%20naive_regression%2C%0A%20%20%20%20)%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(%0A%20%20%20%20DML_model%2C%0A%20%20%20%20DML_model_collider%2C%0A%20%20%20%20HTML%2C%0A%20%20%20%20Stargazer%2C%0A%20%20%20%20multiple_regression%2C%0A%20%20%20%20naive_regression%2C%0A)%3A%0A%20%20%20%20def%20prettify_ols_results1()%3A%0A%20%20%20%20%20%20%20%20order%20%3D%20%5B%0A%20%20%20%20%20%20%20%20%20%20%20%20%22time_on_website%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22residualized_time_on_website%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22age%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22num_social_media_profiles%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22yr_membership%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22Intercept%22%2C%0A%20%20%20%20%20%20%20%20%5D%0A%20%20%20%20%20%20%20%20rename%20%3D%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%22time_on_website%22%3A%20%22Treatment%3A%20Hours%20on%20Website%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22residualized_time_on_website%22%3A%20%22Residualized%20Treatment%3A%20Hours%20on%20Website%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22age%22%3A%20%22Age%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22num_social_media_profiles%22%3A%20%22%23%20of%20Social%20Media%20Profiles%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22yr_membership%22%3A%20%22Years%20of%20Membership%22%2C%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20columns%20%3D%20%5B%22Naive%20OLS%22%2C%20%22Multiple%20OLS%22%2C%20%22DML%22%2C%20%22DML%20w%2F%20Collider%22%5D%0A%0A%20%20%20%20%20%20%20%20regtable%20%3D%20Stargazer(%0A%20%20%20%20%20%20%20%20%20%20%20%20%5Bnaive_regression%2C%20multiple_regression%2C%20DML_model%2C%20DML_model_collider%5D%0A%20%20%20%20%20%20%20%20)%0A%20%20%20%20%20%20%20%20regtable.covariate_order(order)%0A%20%20%20%20%20%20%20%20regtable.custom_columns(columns%2C%20%5B1%2C%201%2C%201%2C%201%5D)%0A%20%20%20%20%20%20%20%20regtable.rename_covariates(rename)%0A%20%20%20%20%20%20%20%20regtable.show_degrees_of_freedom(False)%0A%20%20%20%20%20%20%20%20regtable.title(%22Example%201%3A%20Obtaining%20Exogeneity%20w%2F%20DML%22)%0A%0A%20%20%20%20%20%20%20%20return%20regtable%0A%0A%20%20%20%20regtable%20%3D%20prettify_ols_results1()%0A%20%20%20%20HTML(f%22%3Ccenter%3E%7Bregtable.render_html()%7D%3C%2Fcenter%3E%22)%0A%20%20%20%20return%20prettify_ols_results1%2C%20regtable%0A%0A%0A%40app.cell%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(%0A%20%20%20%20%20%20%20%20r%22%22%22%0A%20%20%20%20%20%20%20%20Recall%20our%20simulated%20source%20of%20truth%20for%20the%20ATE%20is%20%245.%20Notice%20that%20the%20only%20model%20that%20is%20able%20to%20capture%20this%20value%20is%20the%20DML%20procedure!%20We%20can%20see%20that%20the%20na%C3%AFve%20model%20has%20a%20significant%20positive%20bias%20in%20the%20estimate%2C%20whereas%20controlling%20only%20for%20linear%20terms%20of%20the%20confounders%20in%20the%20multiple%20regression%20slightly%20reduces%20this%20bias.%20Additionally%2C%20the%20DML%20procedure%20w%2F%20a%20collider%20demonstrates%20a%20negative%20bias%3B%20this%20negative%20association%20between%20sales%20and%20our%20treatment%20that%20arises%20from%20controlling%20for%20the%20collider%20can%20be%20loosely%20demonstrated%2Fobserved%20by%20solving%20for%20sales%20in%20our%20collider%20DGP%20as%20such%3A%0A%0A%20%20%20%20%20%20%20%20%60%60%60%0A%20%20%20%20%20%20%20%20collider%20%3D%20100%20%2B%202*sales%20%2B%207*time_on_website%0A%0A%20%20%20%20%20%20%20%20%23%20Note%20the%20negative%20relationship%20between%20sales%20and%20time_on_website%20here%0A%20%20%20%20%20%20%20%20sales%20%3D%20(collider%20-%20100%20-%207*time_on_website)%2F2%0A%20%20%20%20%20%20%20%20%60%60%60%0A%0A%20%20%20%20%20%20%20%20These%20results%20demonstrate%20the%20unequivocal%20power%20of%20using%20flexible%2C%20non-parametric%20ML%20models%20in%20the%20DML%20procedure%20for%20residualizing%20out%20the%20confounding!%20Pretty%20satisfying%2C%20no%3F%20**DML%20removes%20the%20necessity%20for%20correct%20parametric%20specification%20of%20the%20confounding%20DGP%20(given%20all%20of%20the%20confounders%20are%20controlled%20for)!**%0A%0A%20%20%20%20%20%20%20%20%3E%20The%20careful%20reader%20will%20have%20noticed%20that%20we%20included%20arbitrary%20covariate%20Z%20in%20our%20data%20generating%20process%20for%20sales.%20However%2C%20note%20that%20Z%20does%20not%20directly%20influence%20time%20spent%20on%20the%20website%2C%20thus%20it%20does%20not%20meet%20the%20definition%20of%20a%20confounder%20and%20thus%20has%20no%20impact%20on%20the%20results%20(outside%20of%20possibly%20improving%20the%20precision%20of%20the%20estimate.%0A%0A%20%20%20%20%20%20%20%20%23%23%23%20**Application%202%3A**%20_Improving%20Precision%20%26%20Statistical%20Power%20in%20Experimental%20Data%20(Randomized%20Controlled%20Trial%E2%80%99s%20(RCTs)%20or%20A%2FB%20Tests)_%0A%0A%20%20%20%20%20%20%20%20It%20is%20a%20common%20misconception%20that%20if%20one%20run%E2%80%99s%20an%20experiment%20with%20a%20large%20enough%20sample%20size%2C%20one%20can%20obtain%20sufficient%20%5Bstatistical%20power%5D(https%3A%2F%2Fen.wikipedia.org%2Fwiki%2FPower_(statistics))%20to%20accurately%20measure%20the%20treatment%20of%20interest.%20However%2C%20one%20commonly%20overlooked%20component%20in%20determining%20statistical%20power%20in%20an%20experiment%2C%20and%20ultimately%20the%20precision%20in%20the%20ATE%20estimate%2C%20is%20the%20variation%20in%20the%20outcome%20you%20are%20trying%20measure.%0A%0A%20%20%20%20%20%20%20%20For%20example%2C%20suppose%20we%20are%20interested%20in%20measuring%20the%20impact%20of%20a%20specific%20advertisement%20on%20an%20individuals%20purchase%20amount%2C%20and%20we%20anticipate%20the%20effect%20to%20be%20small%2C%20but%20non-trivial%20%E2%80%94%20say%20an%20ATE%20of%20%245.%20However%2C%20suppose%20the%20standard%20deviation%20in%20individual%20sales%20is%20very%20large%E2%80%A6%20perhaps%2C%20in%20the%20%24100s%20or%20even%20%241000s.%20In%20this%20case%2C%20it%20may%20be%20difficult%20to%20accurately%20capture%20the%20ATE%20given%20this%20high%20variation%20%E2%80%94that%20is%2C%20we%20may%20obtain%20very%20low%20precision%20(large%20standard%20errors)%20in%20our%20estimate.%20However%2C%20capturing%20this%20ATE%20of%20%245%20may%20be%20economically%20significant%20(if%20we%20run%20the%20experiment%20on%20100%2C000%20households%2C%20this%20can%20amount%20to%20%24500%2C000).%20This%20is%20where%20DML%20can%20come%20to%20the%20rescue.%20Before%20we%20demonstrate%20this%20in%20action%2C%20let%E2%80%99s%20first%20visit%20the%20formula%20for%20the%20standard%20error%20of%20our%20ATE%20estimate%20from%20the%20simple%20regression%20in%20equation%20(1)%3A%0A%0A%20%20%20%20%20%20%20%20%24%24%0A%20%20%20%20%20%20%20%20%5Cbegin%7Bequation%7D%0A%20%20%20%20%20%20%20%20%5Ctext%7Bse%7D_%7B%5Cbeta_1%7D%3D%5Csqrt%7B%5Cfrac%7B%5Csum_i%7B%5Chat%7B%5Cepsilon%7D_i%5E2%7D%7D%7B(n-2)%5Csum_i(T_i-%5Cbar%7BT%7D)%5E2%7D%7D%0A%20%20%20%20%20%20%20%20%5Ctag%7B7%7D%0A%20%20%20%20%20%20%20%20%5Cend%7Bequation%7D%0A%20%20%20%20%20%20%20%20%24%24%0A%0A%20%20%20%20%20%20%20%20Here%20we%20observe%20that%20the%20standard%20error%20of%20our%20estimate%20is%20directly%20influenced%20by%20the%20size%20of%20our%20residuals%20(%24%5Cepsilon%24).%20What%20does%20this%20tell%20us%20then%3F%20If%20our%20treatment%20is%20randomized%2C%20we%20can%20include%20covariates%20in%20a%20multiple%20OLS%20or%20DML%20procedure%2C%20not%20to%20obtain%20exogeneity%2C%20but%20to%20reduce%20the%20variation%20in%20our%20outcome.%20More%20specifically%2C%20we%20can%20include%20variables%20that%20are%20strong%20predictors%20of%20our%20outcome%20to%20reduce%20the%20residuals%20and%2C%20consequently%2C%20the%20standard%20error%20of%20our%20estimate.%20Let%E2%80%99s%20take%20a%20look%20at%20this%20in%20action.%20First%2C%20assume%20the%20following%20DAG%20(note%20treatment%20is%20randomized%20so%20there%20are%20no%20confounders)%3A%0A%20%20%20%20%20%20%20%20%22%22%22%0A%20%20%20%20)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(graphviz%2C%20mo)%3A%0A%20%20%20%20def%20create_dag2()%3A%0A%20%20%20%20%20%20%20%20%23%20Create%20a%20directed%20graph%0A%20%20%20%20%20%20%20%20g%20%3D%20graphviz.Digraph(format%3D%22png%22)%0A%0A%20%20%20%20%20%20%20%20%23%20Add%20nodes%0A%20%20%20%20%20%20%20%20nodes%20%3D%20%5B%0A%20%20%20%20%20%20%20%20%20%20%20%20%22Age%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22%23%20Social%20Media%20Accounts%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22Yrs%20Member%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22Advertisement%20Exposure%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22Sales%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22Z%22%2C%0A%20%20%20%20%20%20%20%20%5D%0A%20%20%20%20%20%20%20%20%5Bg.node(n)%20for%20n%20in%20nodes%5D%0A%0A%20%20%20%20%20%20%20%20g.edge(%22Age%22%2C%20%22Sales%22)%0A%20%20%20%20%20%20%20%20g.edge(%22%23%20Social%20Media%20Accounts%22%2C%20%22Sales%22)%0A%20%20%20%20%20%20%20%20g.edge(%22Yrs%20Member%22%2C%20%22Sales%22)%0A%20%20%20%20%20%20%20%20g.edge(%22Z%22%2C%20%22Sales%22)%0A%20%20%20%20%20%20%20%20g.edge(%22Advertisement%20Exposure%22%2C%20%22Sales%22%2C%20color%3D%22red%22)%0A%20%20%20%20%20%20%20%20g.graph_attr%5B%22dpi%22%5D%20%3D%20%22400%22%0A%0A%20%20%20%20%20%20%20%20g.render(%22data%2Fdag2%22%2C%20format%3D%22webp%22)%0A%0A%20%20%20%20create_dag2()%0A%20%20%20%20mo.image(%22data%2Fdag2.webp%22).center()%0A%20%20%20%20return%20(create_dag2%2C)%0A%0A%0A%40app.cell%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22Furthermore%2C%20suppose%20the%20following%20DGP%3A%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(N%2C%20Z%2C%20age%2C%20np%2C%20num_social_media_profiles%2C%20pd%2C%20yr_membership)%3A%0A%20%20%20%20%23%20Error%20Term%0A%20%20%20%20%CE%B5%20%3D%20np.random.normal(loc%3D150%2C%20scale%3D25%2C%20size%3DN)%0A%0A%20%20%20%20%23%20Randomized%20Treatment%20(T)%20-%20Advertisement%20Exposure%0A%20%20%20%20advertisement_exposure%20%3D%20np.random.choice(%5B0%2C%201%5D%2C%20size%3DN%2C%20p%3D%5B0.5%2C%200.5%5D)%0A%0A%20%20%20%20%23%20Outcome%20(y%20%3D%20f(T%2CX%2CZ)%20%2B%20%CE%B5)%20-%20Sales%20in%20past%20month%0A%20%20%20%20sales_rct%20%3D%20np.maximum(%0A%20%20%20%20%20%20%20%2050%0A%20%20%20%20%20%20%20%20%2B%205%20*%20advertisement_exposure%20%20%23%20Ground%20Truth%20ATE%20of%20%245%0A%20%20%20%20%20%20%20%20-%2010%20*%20age%0A%20%20%20%20%20%20%20%20-%200.05%20*%20age**2%0A%20%20%20%20%20%20%20%20%2B%2015%20*%20num_social_media_profiles%0A%20%20%20%20%20%20%20%20-%200.01%20*%20num_social_media_profiles**2%0A%20%20%20%20%20%20%20%20-%200.5%20*%20(age%20*%20num_social_media_profiles)%0A%20%20%20%20%20%20%20%20%2B%2020%20*%20yr_membership%0A%20%20%20%20%20%20%20%20%2B%200.5%20*%20yr_membership**2%0A%20%20%20%20%20%20%20%20-%200.8%20*%20(age%20*%20yr_membership)%0A%20%20%20%20%20%20%20%20%2B%205%20*%20(num_social_media_profiles%20*%20yr_membership)%0A%20%20%20%20%20%20%20%20%2B%200.8%0A%20%20%20%20%20%20%20%20*%20(num_social_media_profiles%20*%20np.log(age)%20*%20age%20*%20yr_membership%20**%20(1%20%2F%202))%0A%20%20%20%20%20%20%20%20%2B%2015%20*%20Z%0A%20%20%20%20%20%20%20%20%2B%202%20*%20Z**2%0A%20%20%20%20%20%20%20%20%2B%20%CE%B5%2C%0A%20%20%20%20%20%20%20%200%2C%0A%20%20%20%20)%0A%0A%20%20%20%20df_rct%20%3D%20pd.DataFrame(%0A%20%20%20%20%20%20%20%20np.array(%0A%20%20%20%20%20%20%20%20%20%20%20%20%5B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20sales_rct%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20advertisement_exposure%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20age%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20num_social_media_profiles%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20yr_membership%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20Z%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%5D%0A%20%20%20%20%20%20%20%20).T%2C%0A%20%20%20%20%20%20%20%20columns%3D%5B%0A%20%20%20%20%20%20%20%20%20%20%20%20%22sales%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22advertisement_exposure%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22age%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22num_social_media_profiles%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22yr_membership%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22Z%22%2C%0A%20%20%20%20%20%20%20%20%5D%2C%0A%20%20%20%20)%0A%20%20%20%20return%20advertisement_exposure%2C%20df_rct%2C%20sales_rct%2C%20%CE%B5%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(df_rct)%3A%0A%20%20%20%20df_rct%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(%0A%20%20%20%20%20%20%20%20r%22%22%22%0A%20%20%20%20%20%20%20%20Here%20again%2C%20we%20artificially%20simulate%20our%20**ground%20truth%20ATE%20of%20%245**.%20This%20time%2C%20however%2C%20we%20generate%20sales%20such%20that%20we%20have%20a%20very%20large%20variance%2C%20thus%20making%20it%20difficult%20to%20detect%20the%20%245%20ATE.%0A%0A%20%20%20%20%20%20%20%20To%20demonstrate%20how%20the%20inclusion%20of%20covariates%20that%20are%20strong%20predictors%20of%20our%20outcome%20in%20the%20DML%20procedure%20greatly%20improve%20the%20precision%20of%20our%20ATE%20estimates%2C%20we%20will%20run%20the%20following%203%20models%3A%0A%0A%20%20%20%20%20%20%20%201.%20Na%C3%AFve%20OLS%20of%20sales%20(%24y%24)%20on%20randomized%20exposure%20to%20advertisement%20(%24T%24)%0A%20%20%20%20%20%20%20%202.%20Multiple%20OLS%20of%20sales%20(%24y%24)%20on%20randomized%20exposure%20to%20advertisement%20(%24T%24)%20and%20linear%20terms%20of%20all%20of%20the%20sales%20predictors%0A%20%20%20%20%20%20%20%203.%20OLS%20utilizing%20DML%20residualization%20procedure%20outlined%20in%20eq.%20(5)%0A%0A%20%20%20%20%20%20%20%20The%20code%20is%20as%20follows%3A%0A%20%20%20%20%20%20%20%20%22%22%22%0A%20%20%20%20)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(%0A%20%20%20%20GradientBoostingClassifier%2C%0A%20%20%20%20GradientBoostingRegressor%2C%0A%20%20%20%20cross_val_predict%2C%0A%20%20%20%20df_rct%2C%0A%20%20%20%20smf%2C%0A)%3A%0A%20%20%20%20%23%201%20-%20Naive%20OLS%0A%20%20%20%20naive_regression_rct%20%3D%20smf.ols(%0A%20%20%20%20%20%20%20%20formula%3D%22sales%20~%201%20%2B%20advertisement_exposure%22%2C%20data%3Ddf_rct%0A%20%20%20%20).fit()%0A%0A%20%20%20%20%23%202%20-%20Multiple%20OLS%0A%20%20%20%20multiple_regression_rct%20%3D%20smf.ols(%0A%20%20%20%20%20%20%20%20formula%3D%22sales%20~%201%20%2B%20advertisement_exposure%20%2B%20age%20%2B%20num_social_media_profiles%20%2B%20yr_membership%20%2B%20Z%22%2C%0A%20%20%20%20%20%20%20%20data%3Ddf_rct%2C%0A%20%20%20%20).fit()%0A%0A%20%20%20%20%23%203%20-%20DML%20Procedure%0A%20%20%20%20M_sales_rct%20%3D%20GradientBoostingRegressor()%0A%20%20%20%20M_advertisement_exposure_rct%20%3D%20GradientBoostingClassifier()%20%20%23%20Note%20binary%20treatment%0A%0A%20%20%20%20df_rct%5B%22residualized_sales%22%5D%20%3D%20df_rct%5B%22sales%22%5D%20-%20cross_val_predict(%0A%20%20%20%20%20%20%20%20M_sales_rct%2C%0A%20%20%20%20%20%20%20%20df_rct%5B%5B%22age%22%2C%20%22num_social_media_profiles%22%2C%20%22yr_membership%22%2C%20%22Z%22%5D%5D%2C%0A%20%20%20%20%20%20%20%20df_rct%5B%22sales%22%5D%2C%0A%20%20%20%20%20%20%20%20cv%3D3%2C%0A%20%20%20%20)%0A%20%20%20%20df_rct%5B%22residualized_advertisement_exposure%22%5D%20%3D%20(%0A%20%20%20%20%20%20%20%20df_rct%5B%22advertisement_exposure%22%5D%0A%20%20%20%20%20%20%20%20-%20cross_val_predict(%0A%20%20%20%20%20%20%20%20%20%20%20%20M_advertisement_exposure_rct%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20df_rct%5B%5B%22age%22%2C%20%22num_social_media_profiles%22%2C%20%22yr_membership%22%2C%20%22Z%22%5D%5D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20df_rct%5B%22advertisement_exposure%22%5D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20cv%3D3%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20method%3D%22predict_proba%22%2C%0A%20%20%20%20%20%20%20%20)%5B%3A%2C%200%5D%0A%20%20%20%20)%0A%0A%20%20%20%20DML_model_rct%20%3D%20smf.ols(%0A%20%20%20%20%20%20%20%20formula%3D%22residualized_sales%20~%201%20%2B%20residualized_advertisement_exposure%22%2C%0A%20%20%20%20%20%20%20%20data%3Ddf_rct%2C%0A%20%20%20%20).fit()%0A%20%20%20%20return%20(%0A%20%20%20%20%20%20%20%20DML_model_rct%2C%0A%20%20%20%20%20%20%20%20M_advertisement_exposure_rct%2C%0A%20%20%20%20%20%20%20%20M_sales_rct%2C%0A%20%20%20%20%20%20%20%20multiple_regression_rct%2C%0A%20%20%20%20%20%20%20%20naive_regression_rct%2C%0A%20%20%20%20)%0A%0A%0A%40app.cell%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(%0A%20%20%20%20%20%20%20%20r%22%22%22%0A%20%20%20%20%20%20%20%20%3E%20You%20may%20notice%20that%20we%20include%20the%20ML%20model%20to%20predict%20advertisement%20exposure%20as%20well.%20This%20is%20primarily%20for%20consistency%20with%20the%20DML%20procedure.%20However%2C%20because%20we%20know%20advertisement%20exposure%20is%20random%20this%20is%20not%20entirely%20necessary%2C%20but%20I%20would%20recommend%20verifying%20the%20model%20in%20our%20example%20truly%20is%20unable%20to%20learn%20anything%20(i.e.%2C%20in%20our%20case%20it%20should%20predict%20~0.50%20probability%20for%20all%20individuals%2C%20thus%20the%20residuals%20will%20maintain%20the%20same%20variation%20as%20initial%20treatment%20assignment).%0A%0A%20%20%20%20%20%20%20%20With%20the%20corresponding%20results%20of%20these%20models%3A%0A%20%20%20%20%20%20%20%20%22%22%22%0A%20%20%20%20)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(%0A%20%20%20%20DML_model_rct%2C%0A%20%20%20%20HTML%2C%0A%20%20%20%20Stargazer%2C%0A%20%20%20%20multiple_regression_rct%2C%0A%20%20%20%20naive_regression_rct%2C%0A)%3A%0A%20%20%20%20def%20prettify_ols_results2()%3A%0A%20%20%20%20%20%20%20%20order%20%3D%20%5B%0A%20%20%20%20%20%20%20%20%20%20%20%20%22advertisement_exposure%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22residualized_advertisement_exposure%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22age%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22num_social_media_profiles%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22yr_membership%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22Intercept%22%2C%0A%20%20%20%20%20%20%20%20%5D%0A%20%20%20%20%20%20%20%20rename%20%3D%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%22advertisement_exposure%22%3A%20%22Treatment%3A%20Exposure%20to%20Advertisement%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22residualized_advertisement_exposure%22%3A%20%22Residualized%20Treatment%3A%20Exposure%20to%20Advertisement%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22age%22%3A%20%22Age%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22num_social_media_profiles%22%3A%20%22%23%20of%20Social%20Media%20Profiles%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22yr_membership%22%3A%20%22Years%20of%20Membership%22%2C%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20columns%20%3D%20%5B%22Naive%20OLS%22%2C%20%22Multiple%20OLS%22%2C%20%22DML%22%5D%0A%0A%20%20%20%20%20%20%20%20regtable%20%3D%20Stargazer(%0A%20%20%20%20%20%20%20%20%20%20%20%20%5Bnaive_regression_rct%2C%20multiple_regression_rct%2C%20DML_model_rct%5D%0A%20%20%20%20%20%20%20%20)%0A%20%20%20%20%20%20%20%20regtable.covariate_order(order)%0A%20%20%20%20%20%20%20%20regtable.custom_columns(columns%2C%20%5B1%2C%201%2C%201%5D)%0A%20%20%20%20%20%20%20%20regtable.rename_covariates(rename)%0A%20%20%20%20%20%20%20%20regtable.show_degrees_of_freedom(False)%0A%20%20%20%20%20%20%20%20regtable.title(%22Example%202%3A%20Improving%20Statistical%20Power%20in%20RCT%22)%0A%0A%20%20%20%20%20%20%20%20return%20regtable%0A%0A%20%20%20%20regtable_rct%20%3D%20prettify_ols_results2()%0A%20%20%20%20HTML(f%22%3Ccenter%3E%7Bregtable_rct.render_html()%7D%3C%2Fcenter%3E%22)%0A%20%20%20%20return%20prettify_ols_results2%2C%20regtable_rct%0A%0A%0A%40app.cell%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(%0A%20%20%20%20%20%20%20%20r%22%22%22%0A%20%20%20%20%20%20%20%20First%2C%20note%20that%20b%2Fc%20treatment%20was%20randomly%20assigned%2C%20there%20is%20no%20true%20confounding%20that%20is%20occurring%20above.%20The%20poor%20estimates%20of%20the%20ATE%20in%20(1)%20and%20(2)%20are%20the%20direct%20result%20of%20imprecise%20estimates%20(see%20the%20large%20standard%20error%E2%80%99s%20in%20the%20parenthesis).%20Notice%20how%20the%20standard%20error%20gets%20smaller%20(precision%20increasing)%20as%20we%20move%20from%20(1)-(3)%2C%20with%20the%20DML%20procedure%20having%20the%20most%20precise%20estimate.%20Draw%20your%20attention%20to%20the%20%E2%80%9CResidual%20Std.%20Error%E2%80%9D.%20We%20can%20see%20how%20the%20DML%20procedure%20was%20able%20to%20greatly%20reduce%20the%20variation%20in%20the%20ATE%20model%20residuals%20via%20partialling%20out%20the%20variation%20that%20was%20able%20to%20be%20learnt%20(non-parametrically)%20from%20the%20predictors%20in%20the%20ML%20model%20of%20our%20outcome%2C%20sales.%20Again%2C%20in%20this%20example%2C%20we%20see%20DML%20being%20the%20only%20model%20to%20obtain%20the%20true%20ATE!%0A%0A%20%20%20%20%20%20%20%20These%20results%20demonstrate%20the%20benefit%20of%20using%20DML%20in%20an%20experimental%20setting%20to%20increase%20statistical%20power%20and%20precision%20of%20one%E2%80%99s%20ATE%20estimate.%20Specifically%2C%20this%20can%20be%20utilized%20in%20RCT%20or%20A%2FB%20testing%20settings%20where%20the%20variation%20in%20the%20outcome%20is%20very%20large%20and%2For%20one%20is%20struggling%20with%20achieving%20precise%20estimates%20and%20one%20has%20access%20to%20strong%20predictors%20of%20the%20outcome%20of%20interest.%0A%0A%20%20%20%20%20%20%20%20%23%23%20Conclusion%0A%20%20%20%20%20%20%20%20And%20there%20you%20have%20it%20%E2%80%94%20Double%20Machine%20Learning%20simplified%20(hopefully)!%20Thank%20you%20for%20taking%20the%20time%20to%20read%20through%20my%20article.%20I%20hope%20this%20article%20has%20provided%20you%20with%20a%20clear%20and%20intuitive%20understanding%20of%20the%20basics%20of%20DML%20and%20the%20true%20power%20DML%20holds%2C%20along%20with%20how%20you%20can%20utilize%20DML%20in%20your%20daily%20causal%20inference%20tasks.%0A%0A%20%20%20%20%20%20%20%20Stay%20tuned%20for%20part%202%20of%20this%20series%20where%20we%20will%20dive%20into%20some%20very%20cool%20extensions%20of%20DML%20that%20turn%20our%20causal%20inference%20problem%20into%20a%20prediction%20task%2C%20where%20we%20go%20beyond%20the%20ATE%20%26%20predict%20individual%20level%20treatment%20effects%20to%20aid%20in%20decision%20making%20and%20data-driven%20targeting.%0A%0A%20%20%20%20%20%20%20%20As%20always%2C%20I%20hope%20you%20have%20enjoyed%20reading%20this%20as%20much%20as%20I%20enjoyed%20writing%20it!%0A%0A%20%20%20%20%20%20%20%20%23%23%20References%0A%20%20%20%20%20%20%20%20%5B1%5D%20V.%20Chernozhukov%2C%20D.%20Chetverikov%2C%20M.%20Demirer%2C%20E.%20Duflo%2C%20C.%20Hansen%2C%20and%20a.%20W.%20Newey.%20Double%20Machine%20Learning%20for%20Treatment%20and%20Causal%20Parameters.%20ArXiv%20e-prints%2C%20July%202016.%0A%0A%20%20%20%20%20%20%20%20%3Cdiv%20style%3D%22text-align%3A%20center%3B%20font-size%3A%2024px%3B%22%3E%E2%9D%96%E2%9D%96%E2%9D%96%3C%2Fdiv%3E%0A%0A%20%20%20%20%20%20%20%20%3Ccenter%3E%0A%20%20%20%20%20%20%20%20Access%20all%20the%20code%20via%20this%20Marimo%20Notebook%20or%20my%20%5BGitHub%20Repo%5D(https%3A%2F%2Fgithub.com%2Fjakepenzak%2Fblog-posts)%0A%0A%20%20%20%20%20%20%20%20I%20appreciate%20you%20reading%20my%20post!%20My%20posts%20primarily%20explore%20real-world%20and%20theoretical%20applications%20of%20econometric%20and%20statistical%2Fmachine%20learning%20techniques%2C%20but%20also%20whatever%20I%20am%20currently%20interested%20in%20or%20learning%20%F0%9F%98%81.%20At%20the%20end%20of%20the%20day%2C%20I%20write%20to%20learn!%20I%20hope%20to%20make%20complex%20topics%20slightly%20more%20accessible%20to%20all.%0A%20%20%20%20%20%20%20%20%3C%2Fcenter%3E%0A%20%20%20%20%20%20%20%20%22%22%22%0A%20%20%20%20)%0A%20%20%20%20return%0A%0A%0Aif%20__name__%20%3D%3D%20%22__main__%22%3A%0A%20%20%20%20app.run()%0A
bdc66ba81daf0f6035d7106fb7492273b05bacd964c07cd02a6abed071f73ac5