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%23%20Relevant%20Imports%0A%0A%20%20%20%20import%20marimo%20as%20mo%0A%20%20%20%20import%20pandas%20as%20pd%0A%20%20%20%20import%20statsmodels.formula.api%20as%20sm%0A%20%20%20%20import%20numpy%20as%20np%0A%20%20%20%20import%20matplotlib.pyplot%20as%20plt%0A%20%20%20%20from%20sklearn.compose%20import%20ColumnTransformer%0A%20%20%20%20from%20sklearn.pipeline%20import%20Pipeline%0A%20%20%20%20from%20sklearn.preprocessing%20import%20StandardScaler%0A%20%20%20%20from%20sklearn.linear_model%20import%20LogisticRegression%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%0A%20%20%20%20pd.set_option(%22display.max_columns%22%2C%20None)%0A%20%20%20%20return%20(%0A%20%20%20%20%20%20%20%20ColumnTransformer%2C%0A%20%20%20%20%20%20%20%20HTML%2C%0A%20%20%20%20%20%20%20%20LogisticRegression%2C%0A%20%20%20%20%20%20%20%20Pipeline%2C%0A%20%20%20%20%20%20%20%20StandardScaler%2C%0A%20%20%20%20%20%20%20%20display%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%20plt%2C%0A%20%20%20%20%20%20%20%20sm%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%23%20Predictive%20Parameters%20in%20a%20Logistic%20Regression%3A%20Making%20Sense%20of%20it%20All%0A%0A%20%20%20%20%20%20%20%20%3Ccenter%3E%20**Acquire%20a%20robust%20understanding%20of%20logit%20model%20parameters%20beyond%20the%20canonical%20odds%20ratio%20interpretation**%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%20Logistic%20regressions%2C%20also%20referred%20to%20as%20a%20logit%20models%2C%20are%20powerful%20alternatives%20to%20linear%20regressions%20that%20allow%20one%20to%20model%20a%20binary%20outcome%20(i.e.%2C%200%20or%201)%20and%20provide%20notably%20accurate%20predictions%20on%20the%20probability%20of%20said%20outcome%20occurring%20given%20an%20observation.%20The%20parameter%20estimates%20within%20logit%20models%20can%20provide%20insights%20into%20how%20different%20explanatory%20variables%2C%20or%20features%2C%20contribute%20to%20the%20model%20predictions.%20Many%20readers%20are%20likely%20familiar%20with%20interpreting%20logit%20model%20parameters%20in%20terms%20of%20**odds%20ratios**%20(if%20not%20don't%20worry%2C%20I%20briefly%20cover%20this%20below).%20Nevertheless%2C%20the%20interpretation%20of%20these%20parameters%20in%20terms%20of%20**probabilities**%20is%20not%20as%20straightforward%2C%20but%20a%20robust%20understanding%20of%20how%20to%20interpret%20these%20parameters%20can%20provide%20an%20immense%20amount%20of%20intuition%20into%20explaining%20the%20model's%20underlying%20predictive%20behavior.%0A%0A%20%20%20%20%20%20%20%20%3E%20Making%20a%20prediction%20is%20extremely%20powerful%2C%20but%20intuitively%20explaining%20the%20predictive%20components%20of%20a%20model%20in%20real%20world%20terms%20can%20take%20your%20project%20analysis%20to%20the%20next%20level.%0A%0A%20%20%20%20%20%20%20%20By%20the%20end%20of%20this%20article%20you%20will%20see%20logistic%20regression%20in%20a%20new%20light%20and%20gain%20an%20understanding%20of%20how%20to%20explain%20the%20model%20parameters%20with%20a%20staggering%20amount%20of%20intuition.%20This%20article%20assumes%20a%20brief%20underlying%20knowledge%20of%20logit%20models%20and%20thus%20directs%20focus%20more%20intently%20on%20interpreting%20the%20model%20parameters%20in%20a%20comprehensible%20manner.%20Nevertheless%2C%20we%20will%20first%20briefly%20discuss%20the%20theory%20behind%20logit%20models.%20We%20will%20then%20give%20an%20in-depth%20discussion%20into%20how%20to%20interpret%20the%20model%20parameters%20as%20marginal%20effects.%20Lastly%2C%20we%20will%20cover%20a%20practical%20example%20predicting%20fraudulent%20credit%20card%20transactions%20utilizing%20the%20following%20%5BKaggle%20dataset%5D(https%3A%2F%2Fwww.kaggle.com%2Fdatasets%2Fdhanushnarayananr%2Fcredit-card-fraud%3Fresource%3Ddownload).%0A%0A%20%20%20%20%20%20%20%20%23%23%20Logistic%20Regression%20Crash%20Course%0A%0A%20%20%20%20%20%20%20%20%5BLogit%20Models%5D(https%3A%2F%2Fen.wikipedia.org%2Fwiki%2FLogistic_regression)%20belong%20to%20a%20more%20broad%20family%20of%20%5Bgeneralized%20linear%20models%5D(https%3A%2F%2Fen.wikipedia.org%2Fwiki%2FGeneralized_linear_model)%20(GLMs)%20that%2C%20in%20brief%2C%20allow%20for%20flexible%20fitting%20of%20linear%20models%20when%20the%20outcome%20of%20interest%20follows%20a%20different%20underlying%20distribution%20than%20gaussian%20and%20relates%20the%20linear%20model%20to%20the%20outcome%20of%20interest%20via%20a%20link%20function.%20The%20canonical%20linear%20regression%20is%20a%20special%20case%20where%20the%20link%20function%20is%20the%20identity%20function.%20In%20the%20binary%20outcome%20case%2C%20a%20linear%20regression%2C%20which%20is%20referred%20to%20as%20linear%20probability%20model%2C%20can%20provide%20predictions%20that%20are%20less%20than%200%20or%20greater%20than%201%20(See%20Figure%201).%20This%20clearly%20poses%20issues%20as%20probabilities%20are%20naturally%20bounded%20between%200%20and%201.%20However%2C%20GLM's%20provide%20a%20convenient%20framework%20to%20solve%20this%20problem!%0A%0A%20%20%20%20%20%20%20%20The%20logit%20model%20is%20a%20specific%20case%20that%20allows%20for%20the%20modeling%20of%20binary%20outcomes%20that%20follow%20a%20%5BBernoulli%20distribution%5D(https%3A%2F%2Fen.wikipedia.org%2Fwiki%2FBernoulli_distribution).%20The%20logit%20model%20is%20particularly%20attractive%20because%20the%20link%20function%20used%20(logit%20function)%20is%20bounded%20between%200%20and%201.%20And%20consequently%2C%20all%20model%20predictions%20are%20bounded%20between%200%20and%201%2C%20as%20anticipated%20in%20the%20probability%20space.%20Figure%201%20below%20provides%20a%20nice%20visual%20comparison%20between%20the%20model%20fits%20of%20linear%20probability%20model%20and%20logistic%20regression%20in%20a%20bivariate%20case.%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_(mo%2C%20np%2C%20plt)%3A%0A%20%20%20%20def%20lin_prob_vs_logistic_viz()%3A%0A%20%20%20%20%20%20%20%20x%20%3D%20np.arange(-0.25%2C%201.25%2C%200.001)%0A%20%20%20%20%20%20%20%20z%20%3D%201%20%2F%20(1%20%2B%20np.exp(-((x%20-%200.5)%20%2F%200.1)))%0A%20%20%20%20%20%20%20%20y%20%3D%20x%0A%20%20%20%20%20%20%20%20fig%2C%20ax%20%3D%20plt.subplots(figsize%3D(12%2C%208))%0A%20%20%20%20%20%20%20%20ax.plot(x%2C%20y%2C%20color%3D%22black%22%2C%20label%3D%22Linear%20Probability%20Model%22%2C%20zorder%3D1)%0A%20%20%20%20%20%20%20%20ax.plot(x%2C%20z%2C%20color%3D%22%23b30000%22%2C%20label%3D%22Logit%20Model%22%2C%20zorder%3D2)%0A%20%20%20%20%20%20%20%20ax.legend()%0A%20%20%20%20%20%20%20%20ax.axhline(y%3D0%2C%20color%3D%22black%22%2C%20linestyle%3D%22--%22)%0A%20%20%20%20%20%20%20%20ax.axhline(y%3D1%2C%20color%3D%22black%22%2C%20linestyle%3D%22--%22)%0A%20%20%20%20%20%20%20%20%23%20ax.grid(True)%0A%20%20%20%20%20%20%20%20ax.set_ylabel(%22Predicted%20Probability%22%2C%20size%3D15)%0A%20%20%20%20%20%20%20%20ax.set_xlabel(%22X%20%5Cn%20%5Cn%20Figure%201%22%2C%20size%3D15)%0A%20%20%20%20%20%20%20%20ax.set_yticks(%5B0%2C%201%5D)%0A%20%20%20%20%20%20%20%20ax.tick_params(%0A%20%20%20%20%20%20%20%20%20%20%20%20axis%3D%22both%22%2C%20which%3D%22both%22%2C%20labelbottom%3DFalse%2C%20bottom%3DFalse%2C%20top%3DFalse%0A%20%20%20%20%20%20%20%20)%0A%20%20%20%20%20%20%20%20ax.set_title(%22Linear%20Probability%20vs.%20Logit%20Model%22%2C%20size%3D20)%0A%20%20%20%20%20%20%20%20fig.gca().spines%5B%22top%22%5D.set_visible(False)%0A%20%20%20%20%20%20%20%20fig.gca().spines%5B%22right%22%5D.set_visible(False)%0A%20%20%20%20%20%20%20%20fig.gca().spines%5B%22bottom%22%5D.set_visible(False)%0A%20%20%20%20%20%20%20%20fig.gca().spines%5B%22left%22%5D.set_visible(False)%0A%20%20%20%20%20%20%20%20ax.axhspan(0%2C%20-0.25%2C%20alpha%3D0.2%2C%20color%3D%22black%22)%0A%20%20%20%20%20%20%20%20ax.axhspan(1%2C%201.25%2C%20alpha%3D0.2%2C%20color%3D%22black%22)%0A%20%20%20%20%20%20%20%20plt.savefig(%22data%2Flin_prob_vs_logistic_viz.webp%22%2C%20format%3D%22webp%22%2C%20dpi%3D300%2C%20bbox_inches%3D'tight')%0A%0A%20%20%20%20lin_prob_vs_logistic_viz()%0A%20%20%20%20mo.image(%22data%2Flin_prob_vs_logistic_viz.webp%22).center()%0A%20%20%20%20return%20(lin_prob_vs_logistic_viz%2C)%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%20Mathematically%2C%20the%20logit%20model%20is%20characterized%20by%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%20p(X_i)%3D%5Cfrac%7B1%7D%7B1%2Be%5E%7B-(X_i%5Cbeta)%7D%7D%2C%20%5Cspace%20%5Cspace%20%5Cspace%20y%20%5Csim%20%5Ctext%7BBernoulli%7D(p(X_i))%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%20Where%20%24X%24%20denotes%20the%20matrix%20of%20observed%20explanatory%20variables%2C%20or%20features%2C%20in%20the%20model%20and%20%24p(X)%24%20denotes%20the%20probability%20of%20%24y%24%20taking%20on%20a%20value%20of%201.%20Given%20this%20model%20setup%20with%20y%20distributed%20Bernoulli%2C%20the%20goal%20of%20logit%20model%20estimation%20is%20to%20maximize%20the%20following%20likelihood%20function%2C%20which%20is%20our%20joint%20distribution%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%20L%3D%5Cprod_%7Bi%3Ay_i%3D1%7Dp(X_i)%5Cprod_%7Bi%3Ay_i%3D0%7D1-p(X_i)%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%20In%20simple%20terms%2C%20our%20optimization%20problem%20seeks%20to%20choose%20the%20parameters%20(i.e.%2C%20%24%CE%B2%24%20)%20in%20(1)%20that%20will%20maximize%20(2).%20Note%20that%20(2)%20will%20be%20maximized%20when%20the%20estimated%20probability%20is%20close%20to%201%20for%20individuals%20with%20%24y%24%20%3D%201%20and%20close%20to%200%20for%20individuals%20with%20%24y%24%20%3D%200.%20To%20do%20so%2C%20one%20can%20take%20the%20log%20of%20the%20likelihood%20function%20to%20obtain%20the%20log-likelihood%20and%20solve%20this%20problem%20using%20gradient%20descent%20or%20related%20algorithms.%20For%20more%20details%2C%20the%20%5Bwiki%5D(https%3A%2F%2Fen.wikipedia.org%2Fwiki%2FLogistic_regression)%20page%20on%20logistic%20regression%20provides%20a%20nice%20in-depth%20treatment%20to%20logit%20model%20estimation.%0A%0A%20%20%20%20%20%20%20%20%23%23%20Interpreting%20Logit%20Parameters%20as%20Marginal%20Effects%0A%0A%20%20%20%20%20%20%20%20A%20marginal%20effect%20can%20be%20thought%20of%20as%20the%20average%20(or%20marginal)%20effect%20on%20the%20outcome%20(or%20target)%20variable%20resulting%20from%20a%20change%20in%20the%20explanatory%20variable%20(or%20feature)%20of%20interest.%20This%20can%20similarly%20be%20conceptualized%20as%20follows%3A%20At%20the%20average%20(or%20marginal)%20observation%2Findividual%2C%20what%20is%20the%20effect%20of%20changing%20an%20explanatory%20variable%20on%20the%20outcome.%20In%20our%20case%20with%20a%20binary%20variable%2C%20this%20would%20be%20akin%20to%20estimating%20the%20average%20effect%20of%20changing%20an%20explanatory%20variable%20on%20the%20probability%20of%20observing%20the%20outcome.%0A%0A%20%20%20%20%20%20%20%20%3E%20**Caution%3A**%20Marginal%20effects%20must%20be%20interpreted%20only%20as%20an%20association%20and%20not%20as%20a%20causal%20relationship.%20Causality%20requires%20additional%20identifying%20assumptions.%0A%0A%20%20%20%20%20%20%20%20By%20recognizing%20that%20the%20marginal%20effect%20is%20simply%20a%20rate%20of%20change%2C%20one%20may%20immediately%20notice%20that%20this%20boils%20down%20to%20a%20taking%20a%20derivative%20with%20respect%20to%20the%20explanatory%20variable.%20We%20will%20first%20start%20with%20the%20simple%20linear%20regression%20case%20to%20make%20things%20easy.%20Suppose%20we%20have%20the%20following%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_i%3D%20X_i%20%5Cmathbf%7B%5Cbeta%7D%20%2B%20%5Cepsilon_i%20%3D%5Cbeta_0%2B%5Cbeta_1x_%7B1i%7D%2B%5Cbeta_2x_%7B2i%7D%2B%20%5Cdots%20%2B%20%5Cbeta_kx_%7Bki%7D%2B%5Cepsilon_i%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%20In%20order%20to%20find%20the%20marginal%20effect%20of%20any%20variable%2C%20we%20can%20take%20the%20derivative%20with%20respect%20to%20the%20%24x%24%20of%20interest%20in%20(3).%20This%20derivative%20for%20any%20%24x%5E*%24%20is%20simply%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%5Cfrac%7B%5Cpartial%20y_i%7D%7B%5Cpartial%20x%5E*%7D%3D%5Cbeta%5E*%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%20Note%2C%20in%20this%20case%2C%20we%20have%20a%20constant%20marginal%20effect%2C%20which%20makes%20sense%20because%20a%20linear%20regression%20is%20a%20linear%20projection%20of%20y%20onto%20X.%20The%20marginal%20effect%20can%20be%20interpreted%20as%20follows%3A%0A%0A%20%20%20%20%20%20%20%20%3E%20**Interpretation**%3A%20On%20average%2C%20a%20one%20unit%20increase%20in%20%24x%5E*%24%20is%20associated%20with%20a%20%24%CE%B2%5E*%24%20change%20in%20%24y%24.%0A%0A%20%20%20%20%20%20%20%20Now%20the%20careful%20reader%20may%20notice%20that%20this%20derivative%20is%20not%20nearly%20as%20trivial%20for%20logit%20models%20(See%20below%20for%20a%20discussion%20into%20log-odds%20and%20odds%20ratios).%20Consider%20the%20logistic%20model%20outlined%20in%20eq.%20(1).%20The%20derivative%20with%20respect%20to%20any%20x*%20can%20be%20solved%20for%20using%20the%20chain%20and%20quotient%20rules.%20We%20can%20thus%20find%20the%20marginal%20effect%20of%20%24x%5E*%24%20on%20the%20probability%20of%20%24y%24%20occurring%20as%20follows%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%5Cfrac%7B%5Cpartial%20p(X_i)%7D%7B%5Cpartial%20x%5E*%7D%3D%5Cbeta%5E*%20%5Ctimes%20%5Cfrac%7Be%5E%7B-X_i%20%5Cmathbf%7B%5Cbeta%7D%20%7D%7D%7B(1%2Be%5E%7B-X_i%20%5Cmathbf%7B%5Cbeta%7D%7D)%5E2%7D%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%20Here%20we%20can%20see%20that%20the%20marginal%20effect%20is%20now%20a%20function%20of%20the%20values%20of%20%24X%24.%20This%20again%20makes%20sense%20as%20the%20logit%20function%20is%20non-linear%20(See%20Figure%201).%20This%20gives%20us%20the%20power%20to%20evaluate%20the%20marginal%20effects%20at%20any%20combination%20of%20%24X%24.%20However%2C%20if%20we%20want%20to%20summarize%20the%20overall%20marginal%20effects%20we%20are%20left%20with%20two%20options%3A%0A%0A%20%20%20%20%20%20%20%201.%20**Compute%20the%20average%20marginal%20effect**%E2%80%8A-%E2%80%8AThis%20entails%20computing%20the%20marginal%20effect%20using%20(5)%20for%20every%20observation%20and%20then%20computing%20the%20mean%20value%0A%0A%20%20%20%20%20%20%20%202.%20**Compute%20the%20marginal%20effect%20at%20the%20average**%E2%80%8A-%E2%80%8AThis%20entails%20plugging%20in%20the%20mean%20values%20of%20all%20of%20the%20explanatory%20variables%20into%20(5)%20and%20computing%20the%20marginal%20effect%0A%0A%20%20%20%20%20%20%20%20There%20is%20not%20an%20immediately%20apparent%20benefit%20of%20one%20over%20the%20other%20and%20both%20provide%20different%20interpretations%20under%20different%20contexts.%20However%2C%20the%20average%20marginal%20effect%20provides%20the%20cleanest%20interpretation%2C%20and%20thus%20will%20be%20the%20one%20we%20work%20with%20for%20the%20remainder%20of%20this%20post.%0A%0A%20%20%20%20%20%20%20%20%3E%20Note%20that%20all%20calculations%20can%20easily%20be%20extended%20to%20compute%20the%20marginal%20effects%20not%20only%20at%20the%20average%20values%20of%20the%20explanatory%20variables%2C%20but%20at%20any%20combination%20of%20values.%20I%20will%20leave%20this%20for%20the%20interested%20reader%20and%20the%20code%20provided%20in%20the%20next%20section%20can%20be%20readily%20augmented%20to%20do%20so%20(i.e.%2C%20plug%20in%20the%20values%20of%20each%20variable%20you%20are%20interested%20into%20(5)%20to%20obtain%20the%20marginal%20effect%20at%20that%20observation).%20This%20can%20provide%20**very%20powerful**%20insights%20into%20how%20the%20predictive%20parameter%20marginal%20effects%20vary%20by%20certain%20types%20of%20individuals%2Fobservations!%0A%0A%0A%20%20%20%20%20%20%20%20Nevertheless%2C%20the%20interpretation%20of%20the%20average%20marginal%20effect%20in%20a%20logit%20model%20is%20as%20follows%3A%0A%0A%20%20%20%20%20%20%20%20%3E%20**Interpretation%3A**%20On%20average%2C%20a%20one%20unit%20increase%20in%20%24x%5E*%24%20is%20associated%20with%20a%20%7Bcomputed%20value%7D%20percentage%20point%20change%20in%20the%20probability%20of%20%24y%24%20occurring.%0A%0A%20%20%20%20%20%20%20%20%23%23%20Log%20odds%2C%20Odds%2C%20and%20the%20Odds%20Ratio%0A%0A%20%20%20%20%20%20%20%20Before%20we%20provide%20a%20numerical%20example%20of%20this%20in%20action%2C%20it%20is%20important%20to%20discuss%20the%20relationship%20between%20logit%20models%2C%20log%20odds%2C%20odds%2C%20and%20the%20odds%20ratios.%20It%20is%20quite%20common%20that%20logistic%20regression%20results%20are%20interpreted%20in%20terms%20of%20odds%2C%20and%20this%20is%20because%2C%20after%20some%20algebra%2C%20we%20can%20rewrite%20(1)%20as%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%5Cln%20%5Cleft(%20%5Cfrac%7Bp(X_i)%7D%7B1-p(X_i)%7D%20%5Cright)%20%3D%20X_i%20%5Cbeta%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%20the%20left%20hand%20side%20is%20in%20log-odds.%20Thus%2C%20a%20logistic%20regression%20has%20a%20constant%20marginal%20effect%20in%20terms%20of%20log%20odds%2C%20where%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%5Cfrac%7B%5Cpartial%20%5Cln%20%5Cleft(%20%5Cfrac%7Bp(X_i)%7D%7B1-p(X_i)%7D%20%5Cright)%7D%7B%5Cpartial%20x%5E*%7D%20%3D%20%5Cbeta%5E*%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%20However%2C%20marginal%20effects%20in%20terms%20of%20log-odds%20is%20extremely%20removed%20from%20any%20intuition.%20Thus%2C%20one%20can%20solve%20for%20the%20model%20in%20terms%20of%20odds%20by%20taking%20the%20exponential%20of%20(6)%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%5Cfrac%7Bp(X_i)%7D%7B1-p(X_i)%7D%20%3D%20e%5E%7BX_i%20%5Cbeta%7D%0A%20%20%20%20%20%20%20%20%5Ctag%7B8%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%20It%20is%20then%20commonplace%20that%20the%20logistic%20regression%20parameters%20are%20interpreted%20in%20terms%20of%20odds%20by%20computing%20the%20odds%20ratios%20where%2C%20using%20(8)%20and%20incrementing%20%24x%5E*%24%20by%201%2C%20we%20obtain%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%7BOdds%20Ratio%7D%20%3D%20%5Cfrac%7Be%5E%7BX_i%20%5Cbeta%20%2B%20%5Cbeta%5E*%7D%7D%7Be%5E%7BX_i%20%5Cbeta%7D%7D%20%3D%20e%5E%7B%5Cbeta%5E*%7D%0A%20%20%20%20%20%20%20%20%5Ctag%7B9%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%20The%20interpretation%20is%20as%20follows%3A%0A%0A%20%20%20%20%20%20%20%20%3E%20**Interpretation%3A**%20On%20average%2C%20a%20one%20unit%20increase%20in%20%24x%5E*%24%20is%20associated%20with%20multiplying%20the%20odds%20of%20%24y%24%20occurring%20by%20%24%5Cbeta%5E*%24.%0A%0A%20%20%20%20%20%20%20%20In%20my%20opinion%2C%20the%20interpretation%20of%20these%20are%20not%20always%20as%20clearcut%20as%20a%20probability%20interpretation%20unless%20one%20has%20exposure%20to%20and%20works%20with%20log-odds%2C%20odds%2C%20and%20odds%20ratios%20regularly.%20Nevertheless%2C%20(7%E2%80%939)%20can%20provide%20insights%20into%20the%20marginal%20effects%20of%20%24x%5E*%24%20on%20the%20log-odds%2C%20odds%2C%20and%20odds%20ratio%2C%20respectively.%0A%0A%20%20%20%20%20%20%20%20%23%23%20OPTIONAL%3A%20Nonlinearities%20%26%20Interactions%0A%0A%20%20%20%20%20%20%20%20Suppose%20we%20had%20the%20two%20following%20beliefs%3A%20%24x%5E*%24%20has%20a%20quadratic%20relationship%20with%20%24y%24%20and%20we%20believe%20the%20effect%20to%20differ%20by%20gender.%20We%20can%20augment%20our%20logit%20model%20to%20include%20two%20additional%20engineered%20features%20as%20follows%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%20p(X_i)%3D%5Cfrac%7B1%7D%7B1%2Be%5E%7B-(%5Cbeta_0%2B%5Cbeta%5E*x%5E*_i%2B%5Cbeta%5E%7B**%7Dx%5E%7B*2%7D_i%2B%5Cbeta%5E%7B***%7Dx_i%5E*%5Ctext%7Bmale%7D_i%20%2B%20%5Cdots%20%2B%20%5Cbeta_k%20x_%7Bki%7D)%7D%7D%0A%20%20%20%20%20%20%20%20%5Ctag%7B10%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%20we%20include%20the%20squared%20term%20of%20%24x%5E*%24%20and%20interact%20%24x%5E*%24%20with%20a%20dummy%20variable%20for%20if%20that%20individual%20is%20male%20or%20not.%20Thus%2C%20our%20interpretation%20of%20the%20marginal%20effect%20will%20now%20be%20slightly%20less%20nuanced.%0A%0A%20%20%20%20%20%20%20%20%3E%20Note%20that%20whenever%20we%20include%20an%20interaction%20term%20we%20must%20take%20care%20to%20include%20each%20variable%20un-interacted%20first%20in%20the%20model%20(i.e.%2C%20also%20include%20the%20dummy%20male%20alone%20as%20well).%20Otherwise%2C%20the%20interaction%20term%20will%20eat%20the%20raw%20effect%20of%20gender%20on%20%24y%24%20when%20in%20reality%20the%20interaction%20term%20may%20be%20redundant.%0A%0A%20%20%20%20%20%20%20%20Now%20differentiating%20(10)%20with%20respect%20to%20%24x%5E*%24%20we%20obtain%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%5Cfrac%7B%5Cpartial%20p(X_i)%7D%7B%5Cpartial%20x%5E*%7D%3D(%5Cbeta%5E*%2B2%5Cbeta%5E%7B**%7Dx_i%5E*%2B%5Cbeta%5E%7B***%7D%5Ctext%7Bmale%7D_i)%20%5Ctimes%20%5Cfrac%7Be%5E%7B-X_i%5Cbeta%7D%7D%7B(1%2Be%5E%7B-X_i%5Cbeta%7D)%5E2%7D%0A%20%20%20%20%20%20%20%20%5Ctag%7B11%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%20We%20can%20now%20see%20that%2C%20due%20to%20the%20nonlinearities%2C%20the%20marginal%20effect%20will%20vary%20further%20depending%20on%20the%20value%20of%20%24x%5E*%24%20and%20whether%20that%20individual%20is%20male%20or%20female.%20This%20can%20allow%20us%20to%20then%20compute%20average%20marginal%20effects%20for%20males%20versus%20females%20by%20computing%20(11)%20for%20each%20male%20and%20female%20then%20taking%20the%20average%20for%20each.%20We%20can%20similarly%20compute%20the%20odds%20ratio%20as%20done%20in%20(9)%20after%20solving%20(10)%20in%20terms%20of%20odds.%20These%20examples%20will%20be%20left%20for%20the%20interested%20reader%2C%20and%20what%20we%20have%20covered%20so%20far%20should%20be%20sufficient%20to%20compute%20these.%0A%0A%20%20%20%20%20%20%20%20%23%23%20The%20Marginal%20Effects%20in%20Predicting%20Credit%20Card%20Fraud%0A%0A%20%20%20%20%20%20%20%20To%20demonstrate%20a%20concrete%20example%20of%20what%20we%20discussed%20above%2C%20we%20will%20utilize%20the%20following%20%5BKaggle%20dataset%5D(https%3A%2F%2Fwww.kaggle.com%2Fdatasets%2Fdhanushnarayananr%2Fcredit-card-fraud%3Fresource%3Ddownload)%20on%20credit%20card%20transactions%20with%20the%20intent%20of%20building%20a%20model%20to%20predict%20whether%20a%20transaction%20is%20fraudulent.%20The%20dataset%20has%20the%20following%20variables%20on%20each%20transaction%3A%0A%0A%20%20%20%20%20%20%20%20First%2C%20let's%20import%20the%20data%20and%20generate%20summary%20statistics%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_(pd)%3A%0A%20%20%20%20fraud%20%3D%20pd.read_csv(%22data%2Fcard_transdata.csv%22)%0A%0A%20%20%20%20fraud.describe().round(2)%0A%20%20%20%20return%20(fraud%2C)%0A%0A%0A%40app.cell%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22We%20will%20now%20build%20a%20logistic%20regression%20model%20using%20scikit-learn.%20Suppose%20we%20have%20already%20gone%20through%20the%20proper%20steps%20in%20training%20and%20validating%20the%20model%20and%20have%20determined%20the%20appropriate%20model.%20Our%20final%20model%20is%20as%20follows%3A%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(ColumnTransformer%2C%20LogisticRegression%2C%20Pipeline%2C%20StandardScaler%2C%20fraud)%3A%0A%20%20%20%20features%20%3D%20list(fraud.iloc%5B%3A%2C%200%3A7%5D.columns)%0A%0A%20%20%20%20cont_feat%20%3D%20features%5B%3A3%5D%0A%20%20%20%20bin_feat%20%3D%20features%5B3%3A%5D%0A%0A%20%20%20%20normalize%20%3D%20ColumnTransformer(%0A%20%20%20%20%20%20%20%20%5B(%22cont%22%2C%20StandardScaler()%2C%20cont_feat)%2C%20(%22binary%22%2C%20%22passthrough%22%2C%20bin_feat)%5D%0A%20%20%20%20)%0A%0A%20%20%20%20pipeline%20%3D%20Pipeline(%5B(%22normalize%22%2C%20normalize)%2C%20(%22logit%22%2C%20LogisticRegression())%5D)%0A%0A%20%20%20%20%23%20Fit%20Pipeline%0A%20%20%20%20model%20%3D%20pipeline.fit(fraud%5Bfeatures%5D%2C%20fraud%5B%22fraud%22%5D)%0A%0A%20%20%20%20%23%20Final%20Model%0A%20%20%20%20final_mod%20%3D%20model._final_estimator%0A%20%20%20%20return%20bin_feat%2C%20cont_feat%2C%20features%2C%20final_mod%2C%20model%2C%20normalize%2C%20pipeline%0A%0A%0A%40app.cell%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(%22%22%22We%20have%20built%20our%20logit%20model%20to%20predict%20if%20a%20credit%20card%20transaction%20is%20fraudulent.%20Now%20let's%20pivot%20into%20explaining%20the%20model%20parameters%20to%20understand%20the%20inner%20workings%20of%20the%20model%20and%20the%20subsequent%20role%20each%20feature%20plays%20in%20driving%20predictions.%20We%20will%20define%20a%20function%20to%20compute%20the%20marginal%20effects%20of%20the%20logistic%20regression%20both%20in%20terms%20of%20probabilities%20and%20odds%3A%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(LogisticRegression%2C%20np%2C%20pd)%3A%0A%20%20%20%20def%20logit_margeff(%0A%20%20%20%20%20%20%20%20model%3A%20LogisticRegression%2C%20X_features%3A%20pd.DataFrame%2C%20kind%3A%20str%20%3D%20%22probability%22%0A%20%20%20%20)%20-%3E%20pd.DataFrame%3A%0A%20%20%20%20%20%20%20%20%22%22%22%0A%20%20%20%20%20%20%20%20Calculate%20the%20marginal%20effects%20of%20a%20logistic%20regression%20model.%0A%0A%20%20%20%20%20%20%20%20Parameters%0A%20%20%20%20%20%20%20%20----------%0A%20%20%20%20%20%20%20%20model%0A%20%20%20%20%20%20%20%20%20%20%20%20The%20trained%20logistic%20regression%20model.%0A%20%20%20%20%20%20%20%20X_features%0A%20%20%20%20%20%20%20%20%20%20%20%20The%20input%20features%20used%20for%20prediction.%0A%20%20%20%20%20%20%20%20kind%0A%20%20%20%20%20%20%20%20%20%20%20%20The%20type%20of%20marginal%20effects%20to%20calculate.%20Can%20be%20%22probability%22%20or%20%22odds%22.%0A%20%20%20%20%20%20%20%20%20%20%20%20Default%20is%20%22probability%22.%0A%0A%20%20%20%20%20%20%20%20Returns%0A%20%20%20%20%20%20%20%20--------%0A%20%20%20%20%20%20%20%20pd.DataFrame%0A%20%20%20%20%20%20%20%20%20%20%20%20A%20DataFrame%20containing%20the%20features%20and%20their%20corresponding%20marginal%20effects.%0A%20%20%20%20%20%20%20%20%22%22%22%0A%0A%20%20%20%20%20%20%20%20coef%20%3D%20model.coef_%0A%20%20%20%20%20%20%20%20intercept%20%3D%20model.intercept_%0A%0A%20%20%20%20%20%20%20%20if%20kind%20%3D%3D%20%22probability%22%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20logodds%20%3D%20intercept%20%2B%20X_features%20%40%20coef.T%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20marg_effects%20%3D%20%5B%5D%0A%20%20%20%20%20%20%20%20%20%20%20%20for%20i%20in%20range(coef.size)%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20marg_eff%20%3D%20np.mean(%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20coef%5B0%2C%20i%5D%20*%20np.exp(-logodds)%20%2F%20(1%20%2B%20np.exp(-logodds))%20**%202%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20).round(3)%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20marg_effects.append(marg_eff)%0A%0A%20%20%20%20%20%20%20%20elif%20kind%20%3D%3D%20%22odds%22%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20marg_effects%20%3D%20%5B%5D%0A%20%20%20%20%20%20%20%20%20%20%20%20for%20i%20in%20range(coef.size)%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20marg_eff%20%3D%20(np.exp(coef%5B0%2C%20i%5D)).round(3)%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20marg_effects.append(marg_eff)%0A%0A%20%20%20%20%20%20%20%20else%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20raise%20ValueError(%22kind%20must%20be%20either%20'probability'%20or%20'odds'%22)%0A%0A%20%20%20%20%20%20%20%20marginal_effects%20%3D%20%7B%7D%0A%20%20%20%20%20%20%20%20marginal_effects%5B%22features%22%5D%20%3D%20X_features.columns%0A%20%20%20%20%20%20%20%20marginal_effects%5Bf%22marginal_effects_%7Bkind%7D%22%5D%20%3D%20marg_effects%0A%0A%20%20%20%20%20%20%20%20df%20%3D%20pd.DataFrame(marginal_effects)%0A%0A%20%20%20%20%20%20%20%20return%20df%0A%20%20%20%20return%20(logit_margeff%2C)%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%20Note%20that%20line%2014%20is%20the%20average%20marginal%20effect%20calculated%20using%20(5)%20and%20line%2021%20is%20the%20odds%20ratio%20calculated%20using%20(9).%0A%0A%20%20%20%20%20%20%20%20After%20we%20have%20defined%20this%20function%20all%20we%20have%20to%20do%20is%20feed%20in%20the%20logit%20model%20we%20have%20built%20and%20the%20matrix%20of%20features.%20Let's%20first%20interpret%20the%20output%20in%20terms%20of%20probabilities%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_(features%2C%20final_mod%2C%20fraud%2C%20logit_margeff)%3A%0A%20%20%20%20logit_margeff(final_mod%2C%20fraud%5Bfeatures%5D%2C%20kind%3D%22probability%22)%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%20%22%22%22%0A%20%20%20%20%20%20%20%20Recall%20we%20have%20standardized%20all%20continuous%20features%20and%20thus%20a%20one%20unit%20increase%20corresponds%20to%20a%20one%20standard%20deviation%20increase.%20We%20will%20interpret%20the%20estimated%20average%20marginal%20effects%20for%20one%20continuous%20feature%2C%20distance_from_home%2C%20and%20one%20binary%20feature%2C%20used_pin_number.%0A%0A%20%20%20%20%20%20%20%20%3E%20**Interpretation%20(distance_from_home)%3A**%20On%20average%2C%20a%20one%20standard%20deviation%20(65.391)%20increase%20in%20the%20distance%20the%20transaction%20occurred%20from%20the%20cardholders%20home%20address%20is%20associated%20with%20a%202.4%20percentage%20point%20increase%20in%20the%20probability%20that%20the%20transaction%20is%20fraudulent.%0A%20%20%20%20%20%20%20%20%3E%0A%20%20%20%20%20%20%20%20%3E%20**Interpretation%20(used_pin_number)%3A**%20On%20average%2C%20a%20credit%20card%20transaction%20that%20included%20the%20use%20of%20a%20pin%20number%20is%20associated%20with%20a%2032.3%20percentage%20point%20decrease%20in%20the%20probability%20that%20the%20transaction%20is%20fraudulent.%0A%0A%20%20%20%20%20%20%20%20Now%2C%20in%20terms%20of%20odds%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_(features%2C%20final_mod%2C%20fraud%2C%20logit_margeff)%3A%0A%20%20%20%20logit_margeff(final_mod%2C%20fraud%5Bfeatures%5D%2C%20kind%3D%22odds%22)%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%20Conclusion%0A%0A%20%20%20%20%20%20%20%20I%20hope%20this%20post%20has%20helped%20you%20learn%20how%20to%20extract%20**meaningful%20insights**%20from%20logit%20model%20parameters.%20It%20is%20clear%20that%20marginal%20effect%20interpretations%20in%20terms%20of%20probabilities%20provide%20an%20immense%20amount%20of%20intuition%20and%20explainability%20of%20the%20predictive%20mechanics%20under%20a%20logit%20model%20framework.%20Generally%20speaking%2C%20these%20parameters%20explain%20how%20the%20model%20makes%20predictions%20as%20well%20as%20explain%20associations%20between%20the%20target%20and%20features.%20However%2C%20under%20additional%20identifying%20assumptions%2C%20we%20can%20make%20more%20powerful%20statements%20towards%20interpreting%20model%20parameters%20as%20a%20causal%20relationship%20between%20certain%20features%20and%20targets.%20I%20hope%20this%20post%20has%20increased%20your%20knowledge%20and%20appreciation%20for%20logistic%20regressions!%0A%0A%20%20%20%20%20%20%20%20%23%23%20References%0A%0A%20%20%20%20%20%20%20%20Dataset%20available%20on%20Kaggle%3A%20%5BCredit%20Card%20Fraud%5D(https%3A%2F%2Fwww.kaggle.com%2Fdatasets%2Fdhanushnarayananr%2Fcredit-card-fraud%3Fresource%3Ddownload)%20(License%3A%20CC0%3A%20Public%20Domain)%0A%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
633c02652f99db34da8dc9f57292f684728e00a3420489571e0b60a339702128