# 基于玩家实时交互的游戏道具推荐

## 课题背景

目前，推荐系统在很多的互联网平台得到了广泛的应用，例如今日头条的新闻推荐、网易云音乐的音乐推荐、淘宝首页的商品推荐等等，作为一种有效地缓解互联网用户信息过载的技术，推荐系统能够帮助用户在这些平台上找到自己感兴趣的内容，以及与具有相似喜好的人建立新的社交关系。 然而现有的推荐系统大多存在一些问题：

* 针对单个物品的推荐
* 无法建模用户兴趣的动态变化
* 最大化当前收益，忽略了长期受益

在游戏环境中存在许多需要考虑多个商品交互的应用场景。同时，这些场景中往往需要考虑多个强相关物品的推荐。

## 问题定义

在这里给出两个具体的应用场景。

### 大转盘

![图1：游戏中的大转盘玩法](https://noterminus.gitee.io/image_bed/images/rl1.png)

如图1所示，在大转盘上给定8个物品，并给出转大转盘的成本(图上为2钻石)，用户选择是否花费钻石转。转完大转盘后，刷新大转盘上物品，用户可选择是否继续转。

是否点击大转盘，与多方面的因素有关。比如当前转盘物品是否符合玩家需求、玩家对大转盘的主观认可度。

目标是尽可能增加玩家转大转盘的次数，同时控制成本。

### 神秘商店

![图2：游戏中的神秘商店玩法](https://noterminus.gitee.io/image_bed/images/rl2.png)

如图2所示，9个物品在神秘商店中摆放在三个层，每层3个物品。当购买完当前层（图上为第一层）的所有物品，解锁下一层物品的购买权限。点击刷新按钮，替换图中9个物品，并重新从第一层开始购买物品。

在神秘商店的应用场景中，玩家是基于商店中商品的整体分布，选择是否继续购买商品。比如买了某个商品，可能不是这个商品价值高，而是这个商品后面有高价值商品。

目标是尽可能增加玩家在神秘商店中的消费，尤其是平时购买欲望低的商品。

## 问题挑战

这些游戏内特殊推荐场景有以下一些难点：

* 由于样本的稀疏性，如何离线评估模型的效果
* 如何建模用户对商品的个性化价值偏好，对商品做个性化定价
* 如何建模商品之间的相互关系
* 如何同时推荐强相关的多个物品，而不仅仅是推荐一个物品
* 商品组合空间大，如何构建泛化能力强的模型

## 评价指标

### 离线评估

传统推荐系统指标，包括auc、recall、precision等

### 线上评估

* 玩家的总体充值金额
* 玩家在当前商店（比如大转盘和神秘商店）的消费金额

## 数据集描述

* 用户画像数据

| 字段           | 类型     | 描述     |
| ------------ | ------ | ------ |
| role\_id     | string | 玩家id   |
| role\_level  | int    | 等级     |
| vip\_level   | int    | VIP等级  |
| role\_class  | int    | 职业     |
| online\_time | int    | 累计在线时长 |
| ……           |        |        |

* 用户-商品数据

| 字段          | 类型  | 描述    |
| ----------- | --- | ----- |
| role\_id    | int | 玩家id  |
| item\_id    | int | 商品id  |
| buy\_cnt    | int | 购买数量  |
| time\_stamp | int | 购买时间戳 |

* 用户-大转盘数据

| 字段          | 类型  | 描述      |
| ----------- | --- | ------- |
| role\_id    | int | 玩家id    |
| item\_list  | int | 大转盘物品列表 |
| click       | int | 是否点击大转盘 |
| item        | int | 转到的物品   |
| time\_stamp | int | 时间戳     |

* 用户-神秘商店数据

| 字段          | 类型  | 描述    |
| ----------- | --- | ----- |
| role\_id    | int | 玩家id  |
| item\_id    | int | 商品id  |
| click       | int | 是否购买  |
| time\_stamp | int | 购买时间戳 |

## 联系我们

有任何问题，请联系 <zouzhene@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/rl_based_recommendation.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.
