【 基于Python进行用户行为预测与挖掘分析】
一、研究背景
随着互联网应用的普及,用户在浏览网页、使用应用程序、切换窗口和访问不同服务时,会留下大量行为日志。这些日志包含了用户的操作轨迹、活跃时间、访问偏好、使用设备与应用习惯等信息。通过对这些行为数据进行清洗、统计分析与机器学习建模,不仅可以挖掘用户行为规律,还能够进一步构建用户画像,为个性化推荐、用户分群、精准营销和风险识别提供依据。
本次研究以清洗后的用户行为日志和人口属性数据为基础,围绕“用户行为预测与挖掘”这一主题展开分析。研究目标主要包括:
- 对用户行为日志进行结构化处理;
- 提取用户行为特征与人口属性特征;
- 使用机器学习模型对用户职业类别进行预测;
- 通过可视化图表展示用户行为规律;
- 从数据层面挖掘用户在时间分布、应用使用和浏览偏好上的特征。
二、数据来源与数据结构
本次分析使用的是清洗后的数据,主要包括以下几类文件:
1. 行为日志数据
行为日志记录了用户在某一时间点的操作行为,包含如进程名、事件时间、URL、窗口句柄等信息。清洗后生成的行为明细表中主要字段包括:
sample_id:样本编号event_time:行为发生时间process_name:进程名称url:访问地址hour:行为发生小时dayofweek:星期几is_weekend:是否周末has_url:是否存在 URLis_browser:是否为浏览器相关行为url_domain:访问域名
2. 人口属性数据
人口属性用于描述用户的基本背景信息,主要字段包括:
gender:性别birthday:出生年份edu:学历job:职业income:收入province:省份city:城市iscity:城乡属性
3. 合并后的分析数据
在分析中,行为日志与人口属性数据通过 sample_id 进行关联,形成用户级分析表,用于机器学习建模和统计分析。
三、数据清洗与预处理方法
为了保证分析结果的准确性,先对原始日志进行了清洗和标准化处理。主要步骤如下:
import pandas as pd
from pathlib import Path
BASE_DIR = Path(r"d:\twozerotwosix\Internet\data\cleaned")
MERGED_PATH = BASE_DIR / "behavior_with_demographic_v2.csv"
df = pd.read_csv(MERGED_PATH, encoding="utf-8-sig", low_memory=False)
df["event_time"] = pd.to_datetime(df["event_time"], errors="coerce")
df["hour"] = df["event_time"].dt.hour
df["dayofweek"] = df["event_time"].dt.dayofweek
df["is_weekend"] = df["dayofweek"].isin([5, 6]).astype(int)
df["has_url"] = (df["url"].fillna("").str.len() > 0).astype(int)
1. 结构化解析
原始日志通常是文本格式,字段之间以特定符号分隔。清洗时将其拆解为结构化表格,方便后续分析。
2. 缺失值处理
对缺失值、空字符串、无效值进行了统一处理,避免在统计和建模过程中产生偏差。
3. 时间字段转换
将日志中的时间字段转换为标准时间格式,并提取出:
- 小时
hour - 星期
dayofweek - 周末标记
is_weekend
这样有利于分析用户行为的时间规律。
4. 行为类型识别
根据进程名和 URL 字段,识别是否为浏览器行为,是否包含网页访问行为。
5. 域名提取
从 URL 中提取访问域名 url_domain,用于分析用户访问网站偏好。
6. 用户级聚合
按 sample_id 对行为进行汇总,构建用户级特征表
user_df = df.groupby("sample_id").agg(
event_count=("sample_id", "size"),
active_days=("event_time", lambda s: s.dt.date.nunique()),
active_hours=("hour", lambda s: s.nunique(dropna=True)),
browser_ratio=("is_browser", "mean"),
url_ratio=("has_url", "mean"),
weekend_ratio=("is_weekend", "mean"),
avg_hour=("hour", "mean"),
).reset_index()
demo_cols = ["sample_id", "gender", "birthday", "edu", "job", "income", "province", "city", "iscity"]
demo = df[demo_cols].drop_duplicates("sample_id")
user_df = user_df.merge(demo, on="sample_id", how="left")
user_df["age_2012"] = user_df["birthday"].apply(lambda x: 2012 - x if pd.notna(x) else pd.NA)
包括:
- 行为总次数
- 活跃天数
- 活跃小时数
- 浏览器行为占比
- URL 行为占比
- 周末行为占比
- 平均活跃小时
四、分析方法
本研究采用了“描述统计 + 特征工程 + 机器学习分类 + 可视化分析”的组合方法。
1. 描述统计分析
通过统计总记录数、用户数、活跃时间分布、常见进程和常见访问域名等指标,初步了解用户行为特征。
2. 特征工程
从原始行为日志中提取用户行为强相关特征,包括:
- 时间特征
- 浏览器使用特征
- URL 访问特征
- 周末行为比例
- 用户人口属性
feature_names = clf.named_steps["prep"].get_feature_names_out()
importances = clf.named_steps["model"].feature_importances_
fi = sorted(zip(feature_names, importances), key=lambda x: x[1], reverse=True)
top15 = fi[:15]
for name, score in top15:
print(name, round(score, 4))
这些特征作为机器学习模型的输入变量。
3. 机器学习模型
本次预测任务选择了 随机森林分类模型 RandomForestClassifier,预测目标为用户的 job 职业类别。
随机森林是一种基于多棵决策树集成的分类方法,具有以下优点:
- 对非线性关系建模能力强;
- 能处理数值型与类别型混合特征;
- 对异常值和噪声相对鲁棒;
- 能输出特征重要性,便于解释。
df_model = user_df[user_df["job"].notna() & (user_df["job"] != "")].copy()
feature_cols = [
"event_count", "active_days", "active_hours",
"browser_ratio", "url_ratio", "weekend_ratio",
"avg_hour", "gender", "edu", "income",
"province", "city", "iscity", "age_2012"
]
X = df_model[feature_cols]
y = df_model["job"].astype(str)
num_cols = ["event_count", "active_days", "active_hours", "browser_ratio", "url_ratio", "weekend_ratio", "avg_hour", "age_2012"]
cat_cols = ["gender", "edu", "income", "province", "city", "iscity"]
preprocessor = ColumnTransformer(
transformers=[
("num", Pipeline([
("imputer", SimpleImputer(strategy="median")),
("scaler", StandardScaler())
]), num_cols),
("cat", Pipeline([
("imputer", SimpleImputer(strategy="most_frequent")),
("onehot", OneHotEncoder(handle_unknown="ignore"))
]), cat_cols),
]
)
model = RandomForestClassifier(
n_estimators=300,
random_state=42,
class_weight="balanced"
)
clf = Pipeline([
("prep", preprocessor),
("model", model)
])
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.25, random_state=42, stratify=y
)
clf.fit(X_train, y_train)
pred = clf.predict(X_test)
print("Accuracy:", accuracy_score(y_test, pred))
print(classification_report(y_test, pred))
4. 可视化分析
通过绘图展示用户行为分布和模型解释结果,包括:
- 行为发生小时分布
- Top 10 进程分布
- Top 10 访问域名分布
- 用户浏览器行为占比分布
- 用户 URL 行为占比分布
- 模型特征重要性图
五、用户行为统计分析
1. 行为总量与用户规模
从清洗后的行为数据来看,样本中包含大量行为记录,覆盖了多个用户。
从统计结果可以看出,用户行为具有明显的高频性和连续性,说明用户在不同时间段存在较多的窗口切换和应用使用行为。
2. 时间分布特征
从小时分布图可以看出,用户行为在一天中的不同时间段呈现出明显差异。通常情况下:
- 白天和晚间行为较为集中;
- 深夜和凌晨行为较少;
- 行为分布与工作学习作息具有一定对应关系。
这说明用户行为与时间强相关,具有明显的日周期特征。
3. 进程使用特征
Top 10 进程分布图显示,用户行为主要集中在少数常见程序上,例如浏览器、资源管理器以及常见办公软件相关进程。
这说明用户在日常使用中主要围绕:
- 浏览网页
- 文件管理
- 任务操作
- 常用应用切换
这些高频进程可以作为用户行为画像的重要依据。
4. 域名访问特征
从访问域名分布来看,用户访问的网站具有明显的集中性,少数域名出现频率较高,说明用户在使用过程中存在固定的网站访问偏好。
这类特征可以用于:
- 网站偏好分析
- 用户兴趣识别
- 行为路径挖掘
5. 浏览器行为占比
浏览器行为占比表明,用户在整体行为中有相当比例与网页访问相关。
这意味着用户不仅使用本地应用,还频繁访问网页服务,体现出典型的互联网使用特征。
6. URL 行为占比
URL 行为占比说明在所有行为中,真正涉及页面访问的部分占一定比例。
该结果可以用于判断:
- 用户的上网活跃程度
- 浏览器使用习惯
- 内容访问偏好
六、机器学习预测结果分析
1. 预测任务设定
本次机器学习任务的目标是根据用户行为特征和人口属性特征,预测用户的职业类别 job。
2. 特征输入
模型输入包括两大类特征:
行为类特征
event_count:行为总次数active_days:活跃天数active_hours:活跃小时数browser_ratio:浏览器行为占比url_ratio:URL 行为占比weekend_ratio:周末行为占比avg_hour:平均活跃小时
人口类特征
gendereduincomeprovincecityiscityage_2012
3. 模型结果解读
随机森林模型完成了分类训练,并输出了准确率和分类报告。
从结果来看,模型能够从行为和人口属性中提取一定的职业相关信息,但由于职业类别本身可能较复杂、类别分布不均衡,因此预测准确率通常不会特别高。
这说明:
- 行为特征对职业有一定区分能力;
- 但单靠行为日志不足以完全精确判断职业;
- 如果增加更多维度特征,模型效果可能进一步提升。
4. 特征重要性分析
特征重要性图展示了哪些变量对职业预测最有影响。通常在这类任务中,较重要的特征可能包括:
- 行为总次数
- 活跃时间规律
- 是否经常使用浏览器
- URL 访问比例
- 学历、收入等人口属性
这表明用户职业与其上网习惯、活跃时间和社会属性之间存在一定关联。
七、可视化结果说明
本次分析输出了多张图表,便于直观展示用户行为规律。
1. 行为发生小时分布图

该图反映用户行为在一天24小时中的分布情况。
一般可以看到行为高峰集中在工作时间、午间休息时间和晚间时段。
2. Top 10 进程分布图

展示用户最常使用的进程类型。
从图中可以观察哪些程序最常被调用,从而判断用户主要的工作或娱乐方式。
3. Top 10 访问域名图

反映用户访问的网站偏好。
高频域名往往对应用户的常用平台、门户网站、办公系统或内容平台。
4. 浏览器行为占比分布图

展示不同用户在行为中浏览器相关操作占比的差异。
这可以辅助判断用户是偏“网页型”还是偏“本地应用型”。
5. URL 行为占比分布图

展示用户在行为中涉及 URL 的比例分布。
该图能够反映用户的上网活跃度和网页访问强度。
6. 特征重要性图

用于解释模型判断依据,说明哪些特征对职业预测贡献最大。
这对于提高模型可解释性和报告说服力非常重要。
八、结果总结
综合本次分析,可以得到以下结论:
1. 用户行为具有明显的时间规律
用户行为在一天中的分布并不均匀,说明行为与作息、工作节奏密切相关。
2. 用户存在稳定的应用使用偏好
少数常见进程和常用网站占据了大部分行为记录,说明用户使用习惯较为稳定。
3. 浏览器行为在整体行为中占有较高比重
说明用户在日常使用中具有明显的网络浏览和网页访问需求。
4. 人口属性与行为特征对职业预测有一定帮助
随机森林模型表明,行为特征和人口特征结合后,可以对职业进行初步分类预测。
5. 特征重要性结果具有解释价值
模型不仅能预测,还能帮助识别哪些行为特征对职业最敏感,便于后续深入分析。
九、结论
本研究基于清洗后的用户行为日志和人口属性数据,完成了从数据清洗、特征构建、可视化分析到机器学习建模的一整套流程。通过随机森林模型对用户职业进行预测,并结合图表展示用户行为分布和模型特征重要性,初步揭示了用户行为与人口属性之间的关系。
总体来看,用户行为日志不仅能够反映用户的使用习惯,还可以为用户画像和行为预测提供重要依据。后续若进一步扩展特征维度并优化模型,预测效果和分析深度还可以继续提升。
更多推荐



所有评论(0)