ML 在数据分析中的应用
问题
机器学习在数据分析的实际工作中有哪些应用场景?
答案
应用场景概览
| 场景 | ML 方法 | 业务价值 |
|---|---|---|
| 用户分群 | K-Means 聚类 | 精细化运营 |
| 流失预测 | 逻辑回归 / XGBoost | 提前干预挽留 |
| LTV 预测 | 线性回归 / XGBoost | 指导获客预算 |
| 异常检测 | Isolation Forest / DBSCAN | 发现数据异动和欺诈 |
| 推荐系统 | 协同过滤 | 提升转化率和 GMV |
| 文本分析 | TF-IDF + 分类 | 评论情感、工单分类 |
| 时间序列预测 | Prophet / ARIMA | 销量预测、库存管理 |
异常检测
from sklearn.ensemble import IsolationForest
# 检测异常交易
X = df[['amount', 'frequency', 'avg_time_gap']]
iso = IsolationForest(contamination=0.05, random_state=42)
df['is_anomaly'] = iso.fit_predict(X)
# -1 为异常,1 为正常
anomalies = df[df['is_anomaly'] == -1]
print(f'发现 {len(anomalies)} 条异常交易')
时间序列预测
from prophet import Prophet
# 用 Prophet 预测日活
df_prophet = df[['date', 'dau']].rename(columns={'date': 'ds', 'dau': 'y'})
model = Prophet(yearly_seasonality=True, weekly_seasonality=True)
model.fit(df_prophet)
# 预测未来 30 天
future = model.make_future_dataframe(periods=30)
forecast = model.predict(future)
# 可视化
model.plot(forecast)
model.plot_components(forecast) # 趋势 + 周期分解
文本分析
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.linear_model import LogisticRegression
# 用户评论情感分析
tfidf = TfidfVectorizer(max_features=5000)
X = tfidf.fit_transform(df['comment_text'])
y = df['sentiment'] # 正面/负面
model = LogisticRegression()
model.fit(X, y)
# 关键词提取
feature_names = tfidf.get_feature_names_out()
coefs = pd.Series(model.coef_[0], index=feature_names)
print('正面关键词:', coefs.nlargest(10).index.tolist())
print('负面关键词:', coefs.nsmallest(10).index.tolist())
数据分析师的定位
数据分析师使用 ML 的目标是获取业务洞察而非追求算法极致。关注:
- 特征重要性 → 哪些因素关键
- 聚类结果 → 用户有哪些群体
- 预测趋势 → 业务未来走向
- 异常检测 → 哪些数据不正常
常见面试问题
Q1: 数据分析师和算法工程师在 ML 上的分工?
答案:
| 维度 | 数据分析师 | 算法工程师 |
|---|---|---|
| 目标 | 业务洞察 | 模型性能 |
| 工具 | Scikit-learn、Prophet | PyTorch、TF |
| 关注点 | 特征重要性、业务解释 | 模型架构、训练优化 |
| 输出 | 分析报告、策略建议 | 上线模型、API |
Q2: 什么时候不需要用 ML?
答案:
- 简单规则就能解决(如按阈值分群)
- 数据量太小(< 100 条)
- 不需要预测,只需描述性统计
- 业务方需要的是明确规则而非概率