import%20marimo%0A%0A__generated_with%20%3D%20%220.23.16%22%0Aapp%20%3D%20marimo.App()%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20import%20marimo%20as%20mo%0A%0A%20%20%20%20return%20(mo%2C)%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20METADATA%20%3D%20%7B%0A%20%20%20%20%20%20%20%20%22id%22%3A%20%22logistic_regression%22%2C%0A%20%20%20%20%20%20%20%20%22name%22%3A%20%22Logistic%20Regression%22%2C%0A%20%20%20%20%20%20%20%20%22types%22%3A%20%5B%22algorithm%22%5D%2C%0A%20%20%20%20%20%20%20%20%22families%22%3A%20%5B%22linear%22%5D%2C%0A%20%20%20%20%20%20%20%20%22tasks%22%3A%20%5B%22classification%22%5D%2C%0A%20%20%20%20%20%20%20%20%22data%22%3A%20%5B%22tabular%22%2C%20%22text%22%5D%2C%0A%20%20%20%20%20%20%20%20%22learning%22%3A%20%5B%22supervised%22%5D%2C%0A%20%20%20%20%20%20%20%20%22capacity%22%3A%20%22parametric%22%2C%0A%20%20%20%20%20%20%20%20%22mechanisms%22%3A%20%5B%22weighted_sum%22%2C%20%22probability_link%22%5D%2C%0A%20%20%20%20%20%20%20%20%22properties%22%3A%20%5B%22interpretable%22%2C%20%22probabilistic_output%22%5D%2C%0A%20%20%20%20%20%20%20%20%22constraints%22%3A%20%5B%22requires_scaling%22%2C%20%22sensitive_to_outliers%22%5D%2C%0A%20%20%20%20%20%20%20%20%22difficulty%22%3A%20%22beginner%22%2C%0A%20%20%20%20%20%20%20%20%22status%22%3A%20%22complete%22%2C%0A%20%20%20%20%20%20%20%20%22explainability%22%3A%20%22high%22%2C%0A%20%20%20%20%20%20%20%20%22training_cost%22%3A%20%22low%22%2C%0A%20%20%20%20%20%20%20%20%22inference_cost%22%3A%20%22low%22%2C%0A%20%20%20%20%20%20%20%20%22data_appetite%22%3A%20%22low%22%2C%0A%20%20%20%20%7D%0A%0A%20%20%20%20mo.md(f%22%23%20%7BMETADATA%5B'name'%5D%7D%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%20In%20one%20sentence%0A%0A%20%20%20%20Logistic%20Regression%20turns%20a%20weighted%20sum%20of%20features%20into%20a%20probability%20for%20a%20class.%0A%0A%20%20%20%20%23%23%20Mental%20model%0A%0A%20%20%20%20First%20build%20a%20linear%20risk%20score.%20Then%20pass%20it%20through%20an%20S-shaped%20sigmoid%20so%20the%20result%20stays%20between%200%20and%201%3A%0A%0A%20%20%20%20%24%24p(y%3D1%20%5Cmid%20x)%20%3D%20%5Cfrac%7B1%7D%7B1%20%2B%20e%5E%7B-(b%2Bw%5ETx)%7D%7D%24%24%0A%0A%20%20%20%20A%20feature%20adds%20a%20fixed%20amount%20to%20the%20**log-odds**%2C%20not%20directly%20to%20probability.%20The%20same%20coefficient%20can%20change%20probability%20a%20little%20near%200%20or%201%20and%20much%20more%20near%200.5.%0A%0A%20%20%20%20%23%23%20Input%20and%20output%0A%0A%20%20%20%20-%20**Input%3A**%20numeric%20or%20encoded%20features%2C%20including%20large%20sparse%20text%20vectors.%0A%20%20%20%20-%20**Output%3A**%20a%20class%20probability%3B%20a%20threshold%20converts%20it%20to%20a%20label.%0A%20%20%20%20-%20**Learns%3A**%20feature%20coefficients%20and%20an%20intercept.%0A%0A%20%20%20%20%23%23%20How%20it%20learns%0A%0A%20%20%20%20Training%20minimizes%20log%20loss.%20A%20confident%20correct%20prediction%20is%20rewarded%3B%20a%20confident%20wrong%20prediction%20is%20punished%20strongly.%20Regularization%20is%20usually%20included%20to%20stop%20coefficients%20from%20becoming%20unstable%20or%20unnecessarily%20large.%0A%0A%20%20%20%20For%20more%20than%20two%20classes%2C%20common%20strategies%20are%20one-vs-rest%20or%20multinomial%20softmax%20regression.%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%20A%20practical%20example%0A%0A%20%20%20%20For%20churn%20prediction%2C%20the%20model%20might%20combine%20tenure%2C%20support%20contacts%2C%20plan%20type%2C%20and%20recent%20activity.%20The%20product%20does%20not%20have%20to%20use%20a%200.5%20threshold.%20A%20retention%20team%20with%20limited%20capacity%20might%20contact%20only%20the%20highest-risk%205%25%2C%20making%20ranking%20and%20calibration%20more%20important%20than%20raw%20accuracy.%0A%0A%20%20%20%20%23%23%20When%20to%20use%20it%0A%0A%20%20%20%20-%20You%20need%20a%20reliable%20classification%20baseline.%0A%20%20%20%20-%20Explanations%20through%20feature%20contributions%20are%20useful.%0A%20%20%20%20-%20The%20input%20is%20a%20sparse%20bag-of-words%20or%20TF-IDF%20representation.%0A%20%20%20%20-%20Training%20and%20serving%20must%20be%20cheap.%0A%20%20%20%20-%20You%20need%20probabilities%20and%20are%20willing%20to%20validate%20calibration.%0A%0A%20%20%20%20%23%23%20When%20to%20avoid%20it%0A%0A%20%20%20%20-%20The%20decision%20boundary%20depends%20on%20complex%20unknown%20interactions.%0A%20%20%20%20-%20Neighboring%20regions%20of%20feature%20space%20behave%20very%20differently.%0A%20%20%20%20-%20Coefficients%20will%20be%20presented%20as%20causal%20effects%20without%20a%20causal%20design.%0A%20%20%20%20-%20Raw%20features%20make%20classes%20inseparable%20and%20feature%20engineering%20is%20impractical.%0A%0A%20%20%20%20%23%23%20Data%20preparation%0A%0A%20%20%20%20Scale%20continuous%20features%20when%20using%20regularization.%20One-hot%20encode%20categories.%20Handle%20missing%20values%20inside%20a%20pipeline.%20Watch%20for%20perfect%20separators%2C%20leaked%20post-outcome%20fields%2C%20heavy%20class%20imbalance%2C%20and%20unstable%20identifiers.%0A%0A%20%20%20%20%23%23%20Important%20controls%0A%0A%20%20%20%20%7C%20Control%20%7C%20Role%20%7C%0A%20%20%20%20%7C---------%7C------%7C%0A%20%20%20%20%7C%20%60C%60%20%2F%20regularization%20strength%20%7C%20Smaller%20C%20%3D%20stronger%20regularization%20(scikit-learn)%20%7C%0A%20%20%20%20%7C%20Penalty%20%7C%20L2%20stable%20default%3B%20L1%20encourages%20sparse%20coefficients%20%7C%0A%20%20%20%20%7C%20Class%20weights%20%7C%20Changes%20fitting%20emphasis%2C%20does%20not%20replace%20threshold%20selection%20%7C%0A%20%20%20%20%7C%20Threshold%20%7C%20Belongs%20to%20decision%20policy%2C%20chosen%20from%20costs%20or%20capacity%20%7C%0A%0A%20%20%20%20---%0A%0A%20%20%20%20%23%23%20Notebook%20%E2%80%94%20probability%20and%20threshold%0A%0A%20%20%20%20**Question%3A**%20why%20is%20choosing%20a%20classifier%20different%20from%20choosing%20its%20operating%20threshold%3F%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20import%20numpy%20as%20np%0A%20%20%20%20import%20matplotlib.pyplot%20as%20plt%0A%20%20%20%20from%20sklearn.datasets%20import%20make_classification%0A%20%20%20%20from%20sklearn.linear_model%20import%20LogisticRegression%0A%20%20%20%20from%20sklearn.metrics%20import%20precision_score%2C%20recall_score%0A%20%20%20%20from%20sklearn.model_selection%20import%20train_test_split%0A%20%20%20%20from%20sklearn.pipeline%20import%20make_pipeline%0A%20%20%20%20from%20sklearn.preprocessing%20import%20StandardScaler%0A%0A%20%20%20%20X%2C%20y%20%3D%20make_classification(n_samples%3D1000%2C%20weights%3D%5B0.9%2C%200.1%5D%2C%20class_sep%3D1.1%2C%20random_state%3D4)%0A%20%20%20%20X_train%2C%20X_test%2C%20y_train%2C%20y_test%20%3D%20train_test_split(%0A%20%20%20%20%20%20%20%20X%2C%20y%2C%20test_size%3D0.35%2C%20stratify%3Dy%2C%20random_state%3D4%0A%20%20%20%20)%0A%20%20%20%20model%20%3D%20make_pipeline(StandardScaler()%2C%20LogisticRegression()).fit(X_train%2C%20y_train)%0A%20%20%20%20probability%20%3D%20model.predict_proba(X_test)%5B%3A%2C%201%5D%0A%20%20%20%20return%20np%2C%20plt%2C%20precision_score%2C%20probability%2C%20recall_score%2C%20y_test%0A%0A%0A%40app.cell%0Adef%20_(precision_score%2C%20probability%2C%20recall_score%2C%20y_test)%3A%0A%20%20%20%20for%20threshold%20in%20%5B0.1%2C%200.25%2C%200.5%2C%200.75%5D%3A%0A%20%20%20%20%20%20%20%20predicted%20%3D%20probability%20%3E%3D%20threshold%0A%20%20%20%20%20%20%20%20_precision%20%3D%20precision_score(y_test%2C%20predicted%2C%20zero_division%3D0)%0A%20%20%20%20%20%20%20%20_recall%20%3D%20recall_score(y_test%2C%20predicted)%0A%20%20%20%20%20%20%20%20selected%20%3D%20predicted.sum()%0A%20%20%20%20%20%20%20%20print(%0A%20%20%20%20%20%20%20%20%20%20%20%20f%22threshold%3D%7Bthreshold%3A.2f%7D%20%20precision%3D%7B_precision%3A.2f%7D%20%20%22%0A%20%20%20%20%20%20%20%20%20%20%20%20f%22recall%3D%7B_recall%3A.2f%7D%20%20alerts%3D%7Bselected%7D%22%0A%20%20%20%20%20%20%20%20)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(np%2C%20plt%2C%20precision_score%2C%20probability%2C%20recall_score%2C%20y_test)%3A%0A%20%20%20%20thresholds%20%3D%20np.linspace(0.02%2C%200.98%2C%2080)%0A%20%20%20%20_precision%20%3D%20%5Bprecision_score(y_test%2C%20probability%20%3E%3D%20t%2C%20zero_division%3D0)%20for%20t%20in%20thresholds%5D%0A%20%20%20%20_recall%20%3D%20%5Brecall_score(y_test%2C%20probability%20%3E%3D%20t)%20for%20t%20in%20thresholds%5D%0A%20%20%20%20plt.plot(thresholds%2C%20_precision%2C%20label%3D%22precision%22)%0A%20%20%20%20plt.plot(thresholds%2C%20_recall%2C%20label%3D%22recall%22)%0A%20%20%20%20plt.xlabel(%22decision%20threshold%22)%0A%20%20%20%20plt.ylabel(%22score%22)%0A%20%20%20%20plt.title(%22Same%20model%2C%20different%20operating%20policies%22)%0A%20%20%20%20plt.legend()%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20---%0A%0A%20%20%20%20%23%23%20Evaluation%20and%20diagnosis%0A%0A%20%20%20%20Use%20log%20loss%20or%20Brier%20score%20for%20probability%20quality%2C%20PR%20AUC%20for%20rare-positive%20retrieval%2C%20and%20precision%2Frecall%20at%20the%20actual%20operating%20threshold.%20Inspect%20calibration%20curves%20and%20performance%20by%20subgroup.%0A%0A%20%20%20%20A%20low%20recall%20at%20threshold%200.5%20does%20not%20prove%20the%20model%20is%20poor%3B%20the%20ranking%20may%20be%20useful%20with%20a%20different%20threshold.%20Conversely%2C%20a%20high%20ROC%20AUC%20can%20hide%20poor%20precision%20when%20positives%20are%20rare.%0A%0A%20%20%20%20%23%23%20Cost%20profile%0A%0A%20%20%20%20Training%20and%20inference%20are%20very%20fast.%20The%20model%20scales%20well%20to%20high-dimensional%20sparse%20data%20and%20is%20easy%20to%20deploy.%0A%0A%20%20%20%20%23%23%20Related%20models%0A%0A%20%20%20%20-%20**Linear%20Regression**%20predicts%20continuous%20values.%0A%20%20%20%20-%20**Decision%20Tree**%20captures%20thresholds%20and%20interactions.%0A%20%20%20%20-%20**MLP**%20adds%20learned%20nonlinear%20transformations.%0A%0A%20%20%20%20%23%23%20Practical%20takeaway%0A%0A%20%20%20%20Use%20Logistic%20Regression%20early.%20It%20creates%20a%20serious%20reference%20for%20accuracy%2C%20probability%20quality%2C%20latency%2C%20and%20explainability.%0A%20%20%20%20%22%22%22)%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
2b582622f8b50e342e9df58d8486ac1a