# 基于多源数据融合的游戏玩家状态预测

## 课题背景

游戏市场高速发展至今，已经积累了相当规模的用户基础和数据基础。在游戏行业，由于游戏自身内容和玩法的复杂性，游戏实际业务中会存在着非常丰富的多模态数据，例如玩家画像属性数据、玩家行为序列数据以及玩家社交关系数据等，这些数据在结构和内容上都存在较大差异，具有一定的异质性。

状态预测是指通过用户历史数据预测用户在未来某个时间节点的目标状态。在游戏场景中，玩家状态预测是一个非常普遍且具应用广泛的问题，例如流失预测、回流预测、在线时长预测、付费预测等，对游戏的优化迭代和运营管理都有很高的实际价值。

目前，依靠单一形式的数据进行游戏玩家状态预测业务在算法和性能上已经趋于饱和，难以满足更高层次的业务需求。因此，针对游戏玩家状态预测问题，如何有效结合多源数据，充分利用不同数据的自身特点，形成较强的数据表征能力，具有非常重要的研究和应用价值。

## 问题定义

对于每一个游戏玩家，如图1所示，给定历史时间窗口中以玩家画像、玩家社交关系（好友、聊天、组队、帮会）、玩家行为序列为主的多源数据（以天分割）和对应时间节点的目标状态Target，预测游戏玩家在未来某一时间节点Dayt的目标状态Targett。

当前主要考虑流失预测问题，即目标状态为玩家是否流失（暂定连续7天未登录的玩家为流失玩家）。

![图1：基于多源数据融合的游戏玩家状态预测示意图](https://noterminus.gitee.io/image_bed/images/tu-pian%20\(12\).png)

## 问题挑战

* 游戏场景中数据复杂，多源数据之间存在较大的差异性，难以进行统一、有效地结合：
  * 数据饱和度不一致，例如玩家的画像数据和行为序列体量会远大于社交关系的数据
  * 数据结构不一致，例如社交网络为图结构数据，行为序列为序列结构数据，画像数据为状态属性数据
  * 数据范围不一致，例如部分社交关系中会存在服务器的限制（不同服务器可以加好友、聊天，不可以组队和形成帮会），而画像数据和行为序列不存在服务器差异
* 游戏场景中多数为inductive learning问题，例如登录不规律或者新增玩家会导致目标玩家不可见
* 游戏场景中社交关系丰富，且每种社交关系存在一些不同的类型（好友关系中存在删除好友、添加好友，帮会关系中存在任职、审批帮派、踢出帮派、加入帮派、离开帮派），在建模中是否能够考虑这部分特征关系
* 动态图如何应用于多源数据融合的游戏玩家状态预测问题
* 基于多源数据，是否可以通过归纳多种状态预测问题形成统一的解决方案

## 评价指标

* 分类预测问题（例如玩家流失预测、玩家回流预测）主要通过以下指标进行评估： Accuracy、Precision、Recall、AUC
* 回归预测问题（例如玩家在线时长、玩家付费预测）主要通过以下指标进行评估： RMSE、MSE、MAPE

## 数据集描述

数据集按照天进行分割，主要包含以玩家画像数据、玩家社交关系数据和玩家行为序列数据为主的多源数据，具体描述如下所示：

* 玩家画像数据

| 字段                      | 类型     | 描述        |
| ----------------------- | ------ | --------- |
| role\_id                | string | 玩家ID      |
| server                  | int    | 服务器       |
| create\_time            | string | 账号创建时间    |
| role\_level             | int    | 当日等级      |
| vip\_level              | int    | 当日VIP等级   |
| month\_card\_left       | int    | 当日剩余月卡天数  |
| capability              | int    | 当日武林评价    |
| 1m\_login\_cnt          | int    | 近一月登录次数   |
| 1m\_login\_day\_cnt     | int    | 近一月登录天数   |
| acm\_recharge\_amt      | bigint | 历史充值      |
| 1m\_recharge\_amt       | bigint | 近一月充值     |
| online\_time            | bigint | 当日在线时长（秒） |
| online\_get\_exp\_amt   | bigint | 当日在线获得经验  |
| online\_get\_money\_amt | bigint | 当日在线获得金钱  |
| battle\_rank            | bigint | 当日论剑段位    |
| friend\_num             | int    | 当日好友数量    |
| is\_in\_guild           | int    | 当日是否有帮会   |
| energy\_amt             | int    | 当日消耗体力值   |
| dispatch\_cnt           | int    | 当日派遣任务次数  |
| lj\_cnt                 | int    | 当日论剑次数    |
| jh\_cnt                 | int    | 当日江湖次数    |
| drfb\_cnt               | int    | 当日多人副本次数  |
| dqz\_cnt                | int    | 当日夺旗战次数   |
| lj\_win\_rate           | float  | 当日论剑胜率    |
| jh\_win\_rate           | float  | 当日江湖胜率    |
| drfb\_win\_rate         | float  | 当日多人副本胜率  |
| dqz\_win\_rate          | float  | 当日夺旗战胜率   |

* 玩家好友关系数据

| 字段            | 类型     | 描述        |
| ------------- | ------ | --------- |
| ts            | bigint | 时间戳       |
| role\_id\_src | string | 玩家ID（发起方） |
| role\_id\_dst | string | 玩家ID（接受方） |
| type          | string | 类型        |

* 玩家聊天关系数据

| 字段            | 类型     | 描述        |
| ------------- | ------ | --------- |
| ts            | bigint | 时间戳       |
| role\_id\_src | string | 玩家ID（发起方） |
| role\_id\_dst | string | 玩家ID（接受方） |
| type          | string | 类型        |

* 玩家组队关系数据

| 字段       | 类型     | 描述                     |
| -------- | ------ | ---------------------- |
| server   | int    | 服务器                    |
| ts       | bigint | 时间戳                    |
| team\_id | string | 队伍ID                   |
| role\_id | string | 玩家ID                   |
| type     | string | 类型（\[加入队伍，离开队伍，被踢出队伍]） |
| ids      | string | 当前队伍人员ID（ 多个ID以\| 分割）  |

* 玩家帮会关系数据

| 字段        | 类型     | 描述                                      |
| --------- | ------ | --------------------------------------- |
| server    | int    | 服务器                                     |
| ts        | bigint | 时间戳                                     |
| guild\_id | string | 帮会ID                                    |
| role\_id  | string | 玩家ID                                    |
| type      | string | 类型（\[创建帮会，主动加入帮会，审批加入帮会，主动离开帮会，踢出离开帮会]） |

* 玩家行为序列

| 字段             | 类型     | 描述                 |
| -------------- | ------ | ------------------ |
| role\_id       | string | 玩家ID               |
| action\_id     | string | 动作ID               |
| objective\_ids | string | 动作对象ID，多个对象ID以逗号隔开 |
| ts             | int    | 动作发生的时间戳           |

## 相关学术论文

Fuxi-UP团队针对该问题，结合多视图数据相关性以及预测任务相关性，提出多源数据融合的多任务学习框架，工作已发表在[CoG'2020](https://nos.netease.com/mg-file/mg/neteasegamecampus/art_works/20200812/202008122020238598.pdf)

> Zhao, Shiwei, Runze Wu, Jianrong Tao, Manhu Qu, Hao Li, and Changjie Fan. "Multi-source Data Multi-task Learning for Profiling Players in Online Games.", IEEE Conference on Games, 2020.

## 联系我们

有任何问题，请联系 <zhaoshiwei@corp.netease.com>
