跳到主要内容

回归分析

问题

什么是回归分析?线性回归和逻辑回归有什么区别?

答案

回归 vs 分类

任务输出示例
回归连续值预测销售额、预测用户 LTV
分类离散类别是否流失、是否点击

线性回归

线性回归假设目标变量 yy 与特征 xx 之间存在线性关系:

y=w1x1+w2x2++wnxn+by = w_1 x_1 + w_2 x_2 + \cdots + w_n x_n + b
import pandas as pd
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error, r2_score

# 预测用户月消费金额
df = pd.read_csv('users.csv')
features = ['age', 'income', 'login_days', 'order_count']

X = df[features]
y = df['monthly_spend']

# 划分训练集/测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 训练
model = LinearRegression()
model.fit(X_train, y_train)

# 评估
y_pred = model.predict(X_test)
print(f'R² = {r2_score(y_test, y_pred):.4f}')
print(f'RMSE = {mean_squared_error(y_test, y_pred, squared=False):.2f}')

# 查看特征重要性(系数)
for name, coef in zip(features, model.coef_):
print(f'{name}: {coef:.4f}')

逻辑回归

逻辑回归用于二分类,通过 Sigmoid 函数将线性输出映射到 [0, 1] 概率:

P(y=1)=11+e(wTx+b)P(y=1) = \frac{1}{1 + e^{-(w^Tx + b)}}
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import classification_report, roc_auc_score

# 预测用户是否流失
X = df[['login_days', 'order_count', 'complaint_count', 'tenure_months']]
y = df['is_churned'] # 0/1

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

model = LogisticRegression()
model.fit(X_train, y_train)

# 预测概率
y_prob = model.predict_proba(X_test)[:, 1]
print(f'AUC = {roc_auc_score(y_test, y_prob):.4f}')
print(classification_report(y_test, model.predict(X_test)))
数据分析师视角

逻辑回归的系数可解释性强——每个特征对结果的影响方向和大小一目了然,非常适合向业务方解释"什么因素影响用户流失"。


常见面试问题

Q1: 线性回归和逻辑回归的区别?

答案

维度线性回归逻辑回归
输出连续值概率(0~1)
任务回归分类
损失函数MSE交叉熵
激活函数Sigmoid
示例预测 LTV预测是否流失

Q2: R² 是什么?

答案
R²(决定系数)衡量模型对数据的拟合程度,取值 [0, 1]

  • R² = 1:完美拟合
  • R² = 0:与均值预测一样差
  • R² < 0:比均值预测还差

相关链接