
1) 【一句话结论】:通过整合学生在线学习行为数据,构建多阶段机器学习模型(数据预处理、特征工程、模型训练与评估),量化辍学风险,核心是识别行为异常模式并利用统计/机器学习方法预测风险,关键在于特征工程与模型对类别不平衡的适配。
2) 【原理/概念讲解】:辍学风险预测属于二分类问题(辍学/未辍学),需处理非结构化行为数据。
3) 【对比与适用场景】:
| 模型 | 定义 | 特性 | 使用场景 | 注意点 |
|---|---|---|---|---|
| 逻辑回归 | 线性分类模型,基于概率逻辑 | 线性关系,解释性强,计算效率高 | 小样本、特征线性可分 | 欠拟合,对非线性关系处理弱 |
| 随机森林 | 集成学习,多个决策树集成 | 抗过拟合,处理高维数据,可评估特征重要性 | 中等样本量,特征多 | 计算复杂度高,解释性略弱 |
| XGBoost | 梯度提升树模型 | 性能强,处理非线性,可调参优化 | 大样本、类别不平衡 | 易过拟合,需调参(如学习率、树深度) |
4) 【示例】(伪代码):
# 数据预处理
def preprocess_data(df):
df['登录频率'] = df['登录次数'].fillna(df['登录次数'].median())
df = df[(df['登录频率'] > df['登录频率'].quantile(0.01)) &
(df['登录频率'] < df['登录频率'].quantile(0.99))]
return df
# 特征工程
def feature_engineering(df):
features = {}
features['登录频率'] = df['登录次数'] / df['天数']
features['观看时长均值'] = df['总观看时长'] / df['课程数']
features['作业提交率'] = df['提交作业门数'] / df['课程数']
features['滞后登录频率'] = df['登录频率'].shift(1)
features['7天登录频率均值'] = df['登录频率'].rolling(window=7).mean()
return pd.DataFrame(features)
# 模型训练
from xgboost import XGBClassifier
from sklearn.model_selection import train_test_split, GridSearchCV
from sklearn.metrics import roc_auc_score
X = feature_engineering(df)
y = df['辍学标签'] # 1表示辍学,0表示未辍学
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
param_grid = {
'learning_rate': [0.01, 0.1],
'max_depth': [3, 5, 7],
'n_estimators': [100, 200]
}
model = GridSearchCV(XGBClassifier(scale_pos_weight=len(y_train[y_train==0])/len(y_train[y_train==1])),
param_grid, cv=5, scoring='roc_auc')
model.fit(X_train, y_train)
# 评估
y_pred_proba = model.predict_proba(X_test)[:,1]
auc = roc_auc_score(y_test, y_pred_proba)
print(f"AUC: {auc:.4f}")
5) 【面试口播版答案】:
面试官您好,针对学生辍学风险预测,我会分步骤构建模型。首先,数据预处理,处理缺失值和异常值,比如用中位数填充登录频率的缺失,删除登录频率极低的记录。然后特征工程,提取关键行为指标,比如登录频率(每日登录次数)、课程观看时长(平均每门课程观看时长)、作业提交率(提交作业的门数/总课程数),以及滞后1周的登录频率变化。接着选择模型,比如XGBoost,因为它能处理非线性关系,且对类别不平衡敏感(辍学学生少)。训练时用交叉验证调参,评估指标用AUC-ROC,因为能衡量模型区分能力。最后,模型解释,比如分析哪些特征对辍学风险影响最大,比如作业提交率低或登录频率骤降,帮助辅导员干预。这样就能预测学生辍学风险,并指导干预措施。
6) 【追问清单】:
7) 【常见坑/雷区】: