回归分析
问题
什么是回归分析?线性回归和逻辑回归有什么区别?
答案
回归 vs 分类
| 任务 | 输出 | 示例 |
|---|---|---|
| 回归 | 连续值 | 预测销售额、预测用户 LTV |
| 分类 | 离散类别 | 是否流失、是否点击 |
线性回归
线性回归假设目标变量 与特征 之间存在线性关系:
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] 概率:
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:比均值预测还差