# 基于游戏虚拟社交空间的玩家时空序列预测

## 课题背景

时间序列预测问题是一个经久不衰的问题，在游戏中针对整个游戏、服务器的相关指标，如物品、货币等的价值预测已经取得不错的效果，但是由于用户行为的随机性和动态性，针对用户的时间序列预测存在很多挑战。在这其中预测用户的在线时间对于分析用户的游戏模式及生命周期具有十分重要的意义。

在逆水寒等大型MMORPG，社交是维持用户游戏粘性的重要因素，因此游戏用户社交网络可以有效的提高用户在线时间预测的效果。图网络和时间序列预测结合的问题，如时空序列预测（spatial-temporal prediction）问题已经得到了广泛的研究，并且已经应用到交通流量、水电用量预测等服务中。在这里不同于时空序列预测问题，用户的社交图是动态变化的，同时用户的预测指标如在线时长也是动态变化的，因此基于动态社交图的用户在线时间预测问题存在许多挑战和重要的研究意义。

## 问题定义

游戏中的社交图是多关系的同时也是动态变化的，如图1所示，设定 $$N\_p^t$$ 为 时间步时的游戏在线人数，每两个玩家之间可以存在 $$N\_{rela}$$ 种关系（如聊天、交易、组队、好友等），每个玩家在该时间步可以得到 $$N\_{attr}$$ 种属性值，因此每个时间步有这样的一个多关系的属性带权图 $$G^t = (v^t,{\epsilon}^t,W^t,A^t)$$ ,其中 $$v^t$$ 表示节点集合（代表玩家）， $$|v^t|=N\_p^t$$ ， $${\epsilon}^t$$ 表示边的集合（代表了不同关系）， $$W^t \in R^{N\_p^t \times N\_p^t \times N\_{rela}}$$ 表示不同关系的带权邻接矩阵， $$A^t \in R^{N\_p^t \times N\_{attr}}$$ 表示每个玩家的属性矩阵，其中包括玩家在该时间步的在线时长，如图2所示，玩家在线时长也是动态变化的。

![图1：多关系动态社交图](https://noterminus.gitee.io/image_bed/images/tu-pian%20\(5\).png)

![图2：玩家在线时长时间序列曲线](https://noterminus.gitee.io/image_bed/images/tu-pian.png)

基于社交网络的用户在线时间预测可以定义为：给定一个一段时间的多关系带属性的社交图序列，学习得到一个函数 $$h\_s(\cdot)$$ 预测未来一段时间每个玩家的在线时长属性。

$$
h\_s(\[G^{t-M+1},\cdots,G^t])\rightarrow \[A\_{onlinetime}^{t+1},\cdots,A\_{onlinetime}^{t+H}]
$$

## 问题挑战

基于社交网络的用户在线时长预测问题主要存在以下几个挑战：

* 如何将动态社交图和时间序列有效结合。
* 如何解决游戏过程中新用户的冷启动问题。
* 如何有效解决玩家当天没上线导致该玩家节点在当天聊天、组队、交易图中变成孤立点问题。

## 评价指标

用户在线时间预测主要通过以下指标进行评估：

* 在线时间准确率：RMSE、MSE、R Squared

## 数据集描述

数据集按照天进行分割，其中每天数据包括下面五部分：用户该天属性数据（包括画像和在线时长）、该天聊天数据、该天交易数据、该天组队数据、该天好友数据。

* 用户属性数据

| 字段                               | 描述                 |
| -------------------------------- | ------------------ |
| role\_id                         | 玩家id               |
| login\_cnt                       | 当天登录次数             |
| online\_time                     | 当天在线时间             |
| total\_yuan\_bao                 | 最新的累计兑换元宝数（用来筛选玩家） |
| server                           | 服务器                |
| role\_class                      | 职业                 |
| role\_gender                     | 性别                 |
| role\_level                      | 等级                 |
| create\_time                     | 账号创建时间             |
| role\_base\_score                | 基础评分               |
| role\_talisman\_score            | 法宝评分               |
| role\_skill\_score               | 技能评分               |
| role\_practice\_score            | 修炼评分               |
| role\_equip\_score               | 装评                 |
| role\_total\_score               | 战斗力                |
| role\_wuxue\_score               | 武学修为               |
| not\_binded\_charged\_yuanbao    | 不绑定元宝              |
| hstb                             | 元宝票                |
| bdyb                             | 绑定元宝               |
| yin\_liang                       | 铜钱                 |
| yin\_piao                        | 交子                 |
| ck\_yin\_liang                   | 仓库铜钱               |
| bhgx                             | 帮会贡献               |
| sjtxjf                           | 试剑天下积分             |
| kjjf                             | 科举积分               |
| liang\_shi                       | 良师值                |
| jj                               | 军阶                 |
| ttsw                             | 论文声望               |
| role\_cor                        | 根骨                 |
| role\_agi                        | 身法                 |
| role\_int                        | 气海                 |
| role\_sta                        | 耐力                 |
| role\_str                        | 力量                 |
| finished\_task\_acm\_cnt         | 累计完成任务次数           |
| watch\_movie\_acm\_pct\_avg      | 累计观看剧情平均百分比        |
| npc\_interact\_acm\_tms          | 累计NPC交互次数          |
| punish\_cnt                      | 被惩罚次数              |
| f\_bl\_task\_acm\_num            | 累计完成的支线任务个数        |
| acm\_get\_free\_yuanbao\_amt     | 玩家累计获得的免费元宝数       |
| acm\_get\_recharge\_yuanbao\_amt | 玩家累计获得的直充元宝数       |
| acm\_get\_charge\_yuanbao\_amt   | 玩家累计获得的收费元宝数       |
| acm\_get\_yl\_amt                | 玩家累计获得的铜钱数         |
| acm\_get\_yp\_amt                | 玩家累计获得的交子数         |
| acm\_use\_free\_yuanbao\_amt     | 玩家累计消耗的免费元宝数       |
| acm\_use\_recharge\_yuanbao\_amt | 玩家累计消耗直充元宝数        |
| acm\_use\_charge\_yuanbao\_amt   | 玩家累计消耗的收费元宝数       |
| acm\_use\_yl\_amt                | 玩家累计消耗的铜钱数         |
| acm\_use\_yp\_amt                | 玩家累计消耗的交子数         |
| learned\_production\_num         | 玩家已学习的生活技能数        |
| lear                             | 当前职业技能平均等级         |

* 该天聊天数据

| 字段      | 描述    |
| ------- | ----- |
| playera | 聊天发起者 |
| playerb | 聊天接受者 |
| server  | 服务器id |
| count   | 聊天次数  |

* 该天交易数据

| 字段        | 描述      |
| --------- | ------- |
| playera   | 交易发起者   |
| playerb   | 交易收取者   |
| server    | 服务器id   |
| money     | 交易涉及金钱数 |
| tradetype | 交易类型    |

{% hint style="info" %}
其中交易类型：

1-3为面对面交易：1正常交易，2乞讨，3赠与

4：摆摊

5：玩家商店

6：红包交易
{% endhint %}

* 该天组队数据

| 字段      | 描述       |
| ------- | -------- |
| playera | 组队玩家a    |
| playerb | 组队玩家b    |
| server  | 服务器id    |
| count   | 同在一个队伍次数 |

* 该天好友数据

| 字段                       | 描述           |
| ------------------------ | ------------ |
| playera                  | 好友发起者        |
| playerb                  | 好友接受者        |
| server                   | 服务器id        |
| status                   | 状态，1=新增，0=删除 |
| relationship             | 关系类型         |
| sub\_relationship\_type  | 子关系类型        |
| sub\_relationship\_value | 子关系值         |

{% hint style="info" %}
关系类型：

1-好友 2-师徒 6-临时好友 7-临时仇敌 8-仇敌 9-黑名单 10-别人加我为好友。

子关系类型/值对应：

如果主关系是师徒，子关系类型是2，子关系值true表示师傅，false表示徒弟。

如果主关系是好友，子关系类型是3，子关系值true表示双向好友，false表示单向好友。

如果主关系是仇敌，子关系类型是4，子关系值true表示该仇敌置顶，false表示未置顶。
{% endhint %}

## 相关学术论文

Fuxi-UP团队针对该问题，从多任务学习角度，提出了通过Attention结合图数据的时空序列预测框架GMTL，工作已发表在[CIKM'2019](https://nos.netease.com/mg-file/mg/neteasegamecampus/art_works/20200812/202008122020238581.pdf)

> Tao, Jianrong, Linxia Gong, Changjie Fan, Longbiao Chen, Dezhi Ye, and Sha Zhao. "GMTL: A GART Based Multi-task Learning Model for Multi-Social-Temporal Prediction in Online Games." In Proceedings of the 28th ACM International Conference on Information and Knowledge Management, pp. 2841-2849. ACM, 2019.

## 联系我们

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


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://fuxi-up-research.gitbook.io/open-project/research_topics/online_time_prediction.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
