Introduction

Logistic Regression is one of the most important algorithms in data science and machine learning. Despite being simple, it remains widely used in real-world applications such as spam detection, medical diagnosis, fraud prevention, and user behaviour prediction.

Many beginners assume that Logistic Regression is outdated because of modern algorithms like Random Forests or Neural Networks. In reality, Logistic Regression is often the first and best choice when you need a fast, interpretable, and reliable classification model.

// IN THIS GUIDE
What logistic regression is, how it works step-by-step, when to use it, and how to apply it in Python — all in beginner-friendly language with working code examples.

What Is Logistic Regression?

Logistic Regression is a supervised machine learning algorithm used for classification problems — not regression problems, despite the name. It predicts the probability that an input belongs to a specific class.

Typical outputs it handles:

  • Yes / No
  • True / False
  • Class 0 / Class 1

Instead of predicting a numeric value, Logistic Regression predicts a probability between 0 and 1, which is then converted into a class label using a threshold.

// REAL EXAMPLES
Will this email be spam? Will this customer churn? Is this tumour malignant or benign? All binary classification problems — all natural fits for logistic regression.

Logistic Regression vs Linear Regression

This is the most common point of confusion for beginners. The two algorithms share mathematical similarities but serve completely different purposes.

FeatureLinear RegressionLogistic Regression
OutputContinuous valueProbability (0–1)
Use casePredict numbersPredict classes
ExampleHouse price predictionSpam detection
Output range−∞ to +∞0 to 1 (via sigmoid)
Loss functionMean Squared ErrorLog loss (cross-entropy)

// Linear Regression is unsuitable for classification because it can produce values outside 0–1. Logistic Regression solves this with the sigmoid function.

How Logistic Regression Works

Logistic Regression works in three sequential steps — each building on the previous one:

01

Linear Combination of Inputs

The model calculates a weighted sum of all input features, exactly like linear regression.

z = w₀ + w₁x₁ + w₂x₂ + … + wₙxₙ

Here w are the learned weights and x are the input feature values.

02

Sigmoid Function

The raw score z is passed through the sigmoid function, squashing any value into the (0, 1) range — a probability.

σ(z) = 1 ÷ (1 + e−z)

Large positive z → probability close to 1. Large negative z → probability close to 0.

03

Classification Decision

The probability is compared against a decision threshold (default 0.5) to produce a class label.

// THRESHOLD — default 0.5
P < 0.5 → Class 0
P ≥ 0.5 → Class 1
0.00.5 (threshold)1.0

The threshold can be adjusted — lower it to catch more positives (higher recall), raise it to reduce false alarms (higher precision).

The Sigmoid Function Visualised

The sigmoid function is the mathematical core of logistic regression. Its S-shaped curve maps any real-valued input to a probability between 0 and 1.

−10 −5 0 5 10 0 0.5 1 z value (weighted input sum) σ(z) (0, 0.5) → 1 (asymptote) → 0 (asymptote) σ(z) = 1 / (1 + e⁻ᶻ)

// the sigmoid is also called the logistic function — which is where logistic regression gets its name. It is why the model output is always a valid probability.

Understanding Odds and Log Odds

Logistic Regression is internally built on log odds, not direct probabilities. Understanding this makes model coefficients interpretable.

ODDS
P(event) ÷ P(no event)

Ratio of the probability of success to the probability of failure.

LOG ODDS (LOGIT)
ln( P ÷ (1 − P) )

Logarithm of odds — ranges from −∞ to +∞, allowing linear math.

Each coefficient in a logistic regression model represents the change in log odds per unit increase in that feature. A positive coefficient increases the probability of the positive class; a negative coefficient decreases it.

// INTERPRETABILITY TIP
Exponentiate a coefficient (e^coef) to get the odds ratio — a multiplicative factor for how much that feature changes the odds of the outcome per unit increase.

Real-World Use Cases of Logistic Regression

📧
Spam Email Detection
  • Keyword frequency
  • Email length
  • Sender reputation score
🏥
Medical Diagnosis
  • Patient symptoms
  • Lab test results
  • Medical history flags
💳
Credit Risk Assessment
  • Loan approval decisions
  • Default probability scoring
  • Fraud flag detection
📈
Marketing & User Behaviour
  • Click-through rate prediction
  • Purchase likelihood
  • Customer churn probability

Types of Logistic Regression

BINARY
Binary Logistic Regression

Two output classes only. The most common form — outputs a 0 or 1 decision.

Example: spam / not spam; churn / no churn
MULTINOMIAL
Multinomial Logistic Regression

Three or more unordered classes. Uses a softmax function instead of sigmoid.

Example: predict product category A, B, or C
ORDINAL
Ordinal Logistic Regression

Ordered categorical output. Class order matters — not just membership.

Example: risk level low / medium / high

Model Evaluation Metrics

Accuracy alone is not enough for logistic regression — especially on imbalanced datasets. Use a combination of these metrics:

Confusion Matrix

A 2×2 matrix showing true positives, false positives, true negatives and false negatives. The foundation from which all other metrics are derived. See the full precision, recall, and F1 deep-dive for worked examples.

Precision & Recall

  • Precision — of all predicted positives, how many were actually positive (penalises false alarms)
  • Recall — of all actual positives, how many did the model find (penalises missed cases)
  • F1-Score — harmonic mean of precision and recall; useful when both matter

ROC Curve & AUC

Plots True Positive Rate vs False Positive Rate across all thresholds. AUC (Area Under the Curve) summarises the model's separation ability in a single number — higher is better, with 1.0 being perfect and 0.5 being no better than chance. See the full evaluation metrics guide for ROC vs PR curve comparison.

confusion_matrix.py
from sklearn.metrics import (
    confusion_matrix, ConfusionMatrixDisplay,
    classification_report, roc_auc_score
)
import matplotlib.pyplot as plt

# ── Confusion matrix ─────────────────────────────────────
cm = confusion_matrix(y_test, y_pred)
ConfusionMatrixDisplay(confusion_matrix=cm).plot(cmap="Blues")
plt.title("Confusion Matrix — Logistic Regression")
plt.show()

# ── Full classification report ───────────────────────────
print(classification_report(y_test, y_pred))

# ── ROC-AUC ──────────────────────────────────────────────
y_proba = model.predict_proba(X_test)[:, 1]
print(f"ROC-AUC: {roc_auc_score(y_test, y_proba):.4f}")

Logistic Regression in Python

A complete end-to-end example using scikit-learn and the Breast Cancer dataset — a well-known binary classification benchmark included with sklearn:

logistic_regression.py
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression
from sklearn.pipeline import Pipeline
from sklearn.metrics import accuracy_score, classification_report

# ── 1. Load data ─────────────────────────────────────────
data        = load_breast_cancer()
X, y        = data.data, data.target

# ── 2. Split — always before preprocessing ───────────────
X_train, X_test, y_train, y_test = train_test_split(
    X, y, test_size=0.2, stratify=y, random_state=42
)

# ── 3. Pipeline: scale → fit in one safe step ────────────
model = Pipeline([
    ('scaler', StandardScaler()),
    ('lr',     LogisticRegression(max_iter=10000,
                                    C=1.0,         # regularisation
                                    random_state=42))
])
model.fit(X_train, y_train)

# ── 4. Evaluate ──────────────────────────────────────────
y_pred = model.predict(X_test)
print(f"Accuracy: {accuracy_score(y_test, y_pred):.4f}")
print(classification_report(y_test, y_pred,
                             target_names=data.target_names))

# ── 5. Inspect coefficients (interpretability) ───────────
import pandas as pd
coef_df = pd.DataFrame({
    'feature': data.feature_names,
    'coef'   : model.named_steps['lr'].coef_[0]
}).sort_values('coef', ascending=False)
print(coef_df.head(5))  # top 5 features by log-odds impact

// the full notebook and dataset are available on the Review Publically GitHub.

Visualising the Sigmoid Function

sigmoid_plot.py
import numpy as np
import matplotlib.pyplot as plt

z       = np.linspace(-10, 10, 300)
sigmoid = 1 / (1 + np.exp(-z))

plt.figure(figsize=(7, 4))
plt.plot(z, sigmoid, color="#5FD9B8", linewidth=2.5)
plt.axhline(0.5, color="#8B949E", linestyle="--", label="threshold = 0.5")
plt.xlabel("z value")
plt.ylabel("Sigmoid σ(z)")
plt.title("Sigmoid Function — Logistic Regression")
plt.legend()
plt.grid(True, alpha=0.3)
plt.tight_layout()
plt.show()

Strengths & Limitations

STRENGTHS
  • Easy to understand and interpret
  • Fast training time
  • Works well with small datasets
  • Produces calibrated probability outputs
  • Strong baseline model for any classification problem
  • Coefficients are human-readable
LIMITATIONS
  • Assumes linear relationship between features and log odds
  • Sensitive to outliers
  • Not suitable for highly complex, non-linear patterns
  • Performance drops with correlated features
  • Requires feature scaling for best results
  • Multinomial extension less intuitive than binary

Best Practices for Using Logistic Regression

Scale features before training — use StandardScaler or MinMaxScaler inside a Pipeline to prevent leakage.

Handle class imbalance — use class_weight='balanced' or resampling if the minority class is underrepresented.

Remove highly correlated features — multicollinearity makes coefficients unstable and harder to interpret.

Use regularisation — tune the C parameter (inverse of regularisation strength) to control overfitting; try L1 (Lasso) for sparse features.

Evaluate with multiple metrics — Precision, Recall, F1, ROC-AUC, and the full confusion matrix; never rely on accuracy alone.

Tune the decision threshold — the 0.5 default is rarely optimal; adjust it based on the business cost of false positives vs false negatives.

Logistic Regression vs Modern Algorithms

Logistic Regression is not a replacement for advanced models — but it is often more interpretable, easier to explain to non-technical stakeholders, and better for compliance-driven industries where decisions must be auditable.

Many practitioners still use logistic regression as a baseline model before testing complex algorithms such as Random Forests, Gradient Boosting, or Neural Networks. If a complex model barely outperforms logistic regression, the simpler model is usually preferred in production for its explainability and lower maintenance cost.

  • vs Random Forest — RF handles non-linearity and interactions automatically; LR is faster and more interpretable
  • vs XGBoost — XGBoost almost always outperforms on tabular data; LR is the right baseline to beat first
  • vs Neural Networks — NNs learn complex patterns from raw data; LR is preferable when interpretability is legally required (GDPR, healthcare, credit scoring)

FAQs

What is logistic regression in simple terms?

A method that predicts yes-or-no outcomes by estimating probabilities. It learns how each input feature relates to the probability of the positive class, then applies a 0.5 threshold to output a final class prediction.

Why is it called "regression" if it's used for classification?

Because it regresses on the log odds of the outcome — a continuous value internally. The final classification is then derived from the probability output of that regression via a threshold.

How do you explain logistic regression in an interview?

Describe it as a supervised learning technique that models the probability of a binary outcome using a linear combination of features passed through a sigmoid function. Mention the loss function (log loss), regularisation, and how coefficients are interpreted as log-odds changes.

What is the logistic regression formula?

The model computes z = w₀ + w₁x₁ + … + wₙxₙ, then applies the sigmoid: P(y=1|x) = 1 / (1 + e⁻ᶻ). The prediction is Class 1 if P ≥ threshold, otherwise Class 0.

Does logistic regression require feature scaling?

Yes. While it will technically run without scaling, features with very different magnitudes cause poorly calibrated coefficients and slower convergence. Always use StandardScaler or MinMaxScaler — preferably inside a Pipeline to prevent data leakage.

When should I use logistic regression vs a more complex model?

Start with logistic regression as a baseline. If the complex model's performance improvement justifies its cost in interpretability and maintenance, switch. In regulated industries (credit scoring, healthcare), logistic regression is often the default due to explainability requirements.

Final Thoughts

Logistic Regression is one of the most valuable tools every data scientist should master. Its simplicity, interpretability, and efficiency make it ideal for real-world classification problems — and its probability outputs make it uniquely useful in any domain where you need not just a prediction but a calibrated confidence score.

If you are building a strong foundation in data science, Logistic Regression should be one of the first algorithms you fully understand and apply. Master this before moving on to ensemble methods — understanding why and when the simpler model falls short makes the jump to more complex algorithms far more meaningful.

Khalid Hussain

Founder of Review Publically. Writes hands-on guides on data science, machine learning and AI tools, testing every model and library before recommending it.