Code Monkey home page Code Monkey logo

fairy-proof_portrait_system's Introduction

画像标签体系建设

用户(项目)画像是指根据用户(项目)的属性、偏好、习惯、行为等信息而抽象出来的标签化用户(项目)的模型。 通俗说就是给用户(项目)打标签,而标签是通过对用户(项目)信息分析而来的高度精炼的特征标识。 通过打标签可以利用一些高度概括、容易理解的特征来描述用户(项目),可以让人更容易理解用户(项目),并且可以方便计算机处理。

我们主要是建立EOA地址画像、合约地址画像和项目的画像,为了方便后续区分不同地址和不同相同项目,并且给后续数据挖掘提供数据支持。

画像的作用

在互联网领域画像常用来作为精准营销、用户统计、推荐系统、数据挖掘等基础性工作。 但是对于我们,主要利用画像来实现对EOA地址、合约地址和项目的分析、统计等工作:

  1. 用户(项目)统计:
    1. 根据用户(项目)的属性、行为特征对用户(项目)进行分类后,统计不同特征下的用户(项目)数量、分布。
    2. 分析不同用户(项目)画像群体的分布特征。
  2. 数据挖掘:以用户(项目)画像为基础构建推荐系统,进行风险分析等。
  3. 行业报告与用户研究:通过用户(项目)画像分析可以了解行业动态,比如根据项目画像输出分析报告等。

画像所需数据

一般来说,根据具体的业务内容,会有不同的数据,不同的业务目标,所以也会实现不同的画像。 在互联网领域,用户画像数据一般包括以下内容: 人口属性、兴趣特征、消费特征、位置特征、设备属性、行为数据、社交数据等等。

但是针对我们的EOA地址画像、合约画像和项目画像,数据的来源一般会来自两个方向:

  1. 链上数据:记录在区块链上的数据,包括区块、交易、消息日志等。上链意味着共识和存储,数据则不可篡改。
  2. 链下数据:除了区块链上的数据,例如项目的twitter数据、新闻数据等等。

我们需要结合链上数据与链下数据一起分析得到画像标签。

构建画像的基本步骤

画像最重要的一个步骤就是对用户(项目)标签化,我们要明确要分析用户(项目)的各种维度,才能确定如何对用户(项目)进行画像。

在建立用户画像上,可以分为以下几个步骤:

  1. 基础数据收集:包括上一节中描述的链上数据与链下数据。
  2. 画像体系架构:设计画像的体系架构,包括画像层级、画像依赖、画像类型、画像主题等设计。
  3. 数据分析加工:当我们对用户(项目)画像所需要的基础数据收集完毕后,需要对这些资料进行分析和加工,提炼关键要素,构建可视化模型。 对收集到的数据进行统计、规则抽取和模型设计等,抽象出用户(项目)的各类标签
  4. 画像标签系统架构:利用大数据的整体架构对标签化的过程进行开发实现,对数据进行加工,将标签管理化。 同时将标签计算的结果进行计算。这个过程中需要依靠Hive,Hbase等大数据技术,为了提高数据的实时性,还要用到Flink,Kafka等实时计算技术。
  5. 标签可视化:要将我们的计算结果,数据,接口等等,形成服务。比如,图表展示,可视化展示等等。

画像的系统架构(仅供参考)

画像标签系统为了方便使用和保持鲁棒性,一般需要保证大数据、实时性和可视化等特性。

主要实现的挑战分为以下几个方面:

  1. 大数据: 整体用户(项目)画像体系必须建立在大数据架构之上。
  2. 实时性: Kafka和Flink等实时流式计算框架的数据的一致性,事件时间窗口,水印,触发器都成为很容易的实现。而实时的OLAP框架Druid更是让交互式实时查询成为可能。
  3. 数据仓库: Hive是作为离线数仓的不二选择,而hive使用的新引擎tez也有着非常好的查询性能,而最近新版本的Flink也支持了hive性能非常不错。但是在实时用户画像架构中,Hive是作为一个按天的归档仓库的存在,作为历史数据形成的最终存储所在,也提供了历史数据查询的能力。而Druid作为性能良好的实时数仓,将共同提供数据仓库的查询与分析支撑,Druid与Flink配合共同提供实时的处理结果,实时计算不再是只作为实时数据接入的部分,而真正的挑起大梁。

依据上面的分析与我们要实现的功能,我们将依赖Hive和Druid建立我们的数据仓库,使用Kafka进行数据的接入,使用Flink作为我们的流处理引擎,对于标签的元数据管理我们还是依赖Mysql作为把标签的管理,并使用Airflow作为我们的调度任务框架,并最终将结果输出到Mysql和Hbase中。

画像标签体系架构

梳理标签体系是实现用户画像过程中最基础、也是最核心的工作,后续的建模、数据仓库搭建都会依赖于标签体系。 标签是某一种用户特征的符号表示。是一种内容组织方式,是一种关联性很强的关键字,能方便的帮助我们找到合适的内容及内容分类。 标签解决的是描述或命名问题,但在实际应用中,还需要解决数据之间的关联,所以通常将标签作为一个体系来设计,以解决数据之间的关联问题。

用户画像标签体系创建后一般要包含以下几个方面的内容:

  1. 画像标签的命名
  2. 画像标签的主题
  3. 画像标签的属性
  4. 画像标签的分类
  5. 画像标签的层级
  6. 画像标签的依赖

画像标签的分类

画像标签按照构造方式、数据类型、业务需求等方面进行分类,每一种分类方式都代表可以采取一种检索标签的方式。

按照打标签的方式

按照打标签的方式来看,一般分为三种类型:

  1. 基于统计类的画像标签
  2. 基于规则类的画像标签
  3. 基于挖掘类的画像标签

统计类标签:这类标签是最为基础也最为常见的标签类型,例如对于某个用户来说,他的性别、年龄、城市、星座、近7日活跃时长、近7日活跃天数、近7日活跃次数等字段可以从用户注册数据、用户访问、消费类数据中统计得出。该类标签构成了用户画像的基础。

规则类标签:该类标签基于用户行为及确定的规则产生。例如对平台上“消费活跃”用户这一口径的定义为近30天交易次数>=2。在实际开发画像的过程中,由于运营人员对业务更为熟悉、而数据人员对数据的结构、分布、特征更为熟悉,因此规则类标签的规则确定由运营人员和数据人员共同协商确定。

机器学习挖掘类标签:该类标签通过数据挖掘产生,应用在对用户的某些属性或某些行为进行预测判断。例如根据一个用户的行为习惯判断该用户是男性还是女性,根据一个用户的消费习惯判断其对某商品的偏好程度。该类标签需要通过算法挖掘产生。

按照标签的主题

按照标签的主题来看,一般分多种类型:

  1. 用户(项目)属性画像标签
  2. 用户(项目)行为画像标签
  3. 用户(项目)偏好画像标签
  4. 用户(项目)风险画像标签 ......

按照数据的类型(待定)

按照数据的类型来看,一般分为两种类型:

  1. 定性画像标签
  2. 定量画像标签

定性标签:人为定性的标签,快捷方便但缺少数据验证,可深入数据挖掘。

定量标签:根据数据统计或者数据分析得到的标签,数据得到充分验证,但是难以挖掘深层特征。

按照标签的构造方式(待定)

按照标签的构造方式来看,可以分为四种类型:

  1. 原始数据层画像标签
  2. 事实标签层画像标签
  3. 模型标签层画像标签
  4. 预测层画像标签

画像标签的分级

标签需要进行分级分类的管理,一方面使得标签更加的清晰有条件,另一方面也方便我们对标签进行存储查询,也就是管理标签。

把标签分成不同的层级和类别:

  1. 方便管理数千个标签,让散乱的标签体系化。
  2. 维度并不孤立,标签之间互有关联
  3. 可以为标签建模提供标签子集。

同时需要注意梳理某类别的子分类时,尽可能的遵循MECE原则(相互独立、完全穷尽),尤其是一些有关用户分类的,要能覆盖所有用户,但又不交叉。

画像标签体系展示

标签主题表

标签主题 创建人 创建时间
属性 QS 2022/8/30 15:30:46
行为 QS 2022/8/30 15:30:46
偏好 Eliot 2022/8/30 15:30:46
风险 Eliot 2022/8/30 15:30:46

标签类型表

标签类型 创建人 创建时间
统计类 QS 2022/8/30 15:30:46
规则类 QS 2022/8/30 15:30:46
挖掘类 Eliot 2022/8/30 15:30:46

开发方式表

开发方式 创建人 创建时间
人为分类 QS 2022/8/30 15:30:46
机器统计 Eliot 2022/8/30 15:30:46
规则统计 Eliot 2022/8/30 15:30:46
算法预测 Eliot 2022/8/30 15:30:46

开发人表

开发人 创建人 创建时间
SJ QS 2022/8/30 15:30:46
LX QS 2022/8/30 15:30:46
GWD Eliot 2022/8/30 15:30:46

标签桶表

标签桶 创建人 创建时间
EOA地址标签 QS 2022/8/30 15:30:46
合约地址标签 QS 2022/8/30 15:30:46
项目标签 Eliot 2022/8/30 15:30:46

标签依赖表

对于一些需要其他标签统计、计算和预测的标签,记录该标签依赖的标签

标签名 依赖标签 创建人 创建时间
project_risk_level project_price_risk QS 2022/8/30 15:30:46
project_risk_level project_operation_risk QS 2022/8/30 15:30:46
project_risk_level project_code_risk QS 2022/8/30 15:30:46

画像标签表

针对标签的层级:标签层级应该是树或者森林,所以每个标签只有一个上级标签。 层级主要是概念上的层级。

  • 上级标签ID为了方便查找父节点
  • 根标签ID为了方便查找根
  • 标签层级为了方便查找统计标签
  • 标签ID路径是为了方便查找子树
标签ID 标签名 主题 标签类型 数据类型 标签桶 上级标签ID 根标签ID 标签层级 标签ID路径 描述 参数 开发方式 开发人 创建时间 备注
0000001 activate_days 行为 统计类 int EOA地址标签 1 1 / 地址最后一次行为出现时间 - 第一次行为时间 {} 机器统计 QS 2022/8/30 15:30:46
0000002 deploy_contract_count 行为 统计类 int EOA地址标签 2 1 / 部署合约数量 {} 机器统计 QS 2022/8/30 15:30:46
0000003 max_deploy_contract_count_per_day 行为 统计类 int EOA地址标签 2 2 2 /2/ 一天内部署合约最大次数 {} 机器统计 QS 2022/8/30 15:30:46
0000004 token_transfer_receive_count 行为 统计类 int EOA地址标签 4 1 / erc20 收款的总次数 {} 机器统计 QS 2022/8/30 15:30:46
0000005 max_token_transfer_receive_count_per_day 行为 统计类 int EOA地址标签 4 4 2 /4/ 一天内 代币收款 收款最大次数 {} 机器统计 QS 2022/8/30 15:30:46
0000006 avg_token_transfer_receive_count 行为 统计类 float EOA地址标签 4 4 2 /4/ 平均每天代币收款次数 {} 机器统计 QS 2022/8/30 15:30:46
0000007 token_transfer_send_count 行为 统计类 int EOA地址标签 7 1 / token转出次数 {} 机器统计 QS 2022/8/30 15:30:46
0000008 max_token_transfer_send_count_per_day 行为 统计类 int EOA地址标签 7 7 2 /7/ 一天内代币转出最高次数 {} 机器统计 QS 2022/8/30 15:30:46
0000009 avg_token_transfer_send_count 行为 统计类 float EOA地址标签 7 7 2 /7/ 平均每天token转出次数 {} 机器统计 QS 2022/8/30 15:30:46
0000010 tx_send_count 行为 统计类 int EOA地址标签 10 1 / 发送交易总数量 = tx_send + ether_send {} 机器统计 QS 2022/8/30 15:30:46
0000011 max_tx_send_count_per_day 行为 统计类 int EOA地址标签 10 10 2 /10/ 一天内发送交易最高的次数 {} 机器统计 QS 2022/8/30 15:30:46
0000012 avg_tx_send_count 行为 统计类 float EOA地址标签 10 10 2 /10/ 平均每天发送交易次数 {} 机器统计 QS 2022/8/30 15:30:46
0000013 ether_send_count 行为 统计类 int EOA地址标签 13 1 / 转出 eth 次数总和 {} 机器统计 QS 2022/8/30 15:30:46
0000014 max_eth_send_count_per_day 行为 统计类 int EOA地址标签 13 13 2 /13/ 一天内转出eth最高次数 {} 机器统计 QS 2022/8/30 15:30:46
0000015 avg_eth_send_count_day 行为 统计类 float EOA地址标签 13 13 2 /13/ 平均每天转出 eth 次数 {} 机器统计 QS 2022/8/30 15:30:46
0000016 eth_receive_count 行为 统计类 int EOA地址标签 16 1 / 转入 eth次数总和 {} 机器统计 QS 2022/8/30 15:30:46
0000017 max_eth_receive_count_per_day 行为 统计类 int EOA地址标签 16 16 2 /16/ 一天收到 eth 收款最高次数 {} 机器统计 QS 2022/8/30 15:30:46
0000018 avg_eth_receive_count_day 行为 统计类 float EOA地址标签 16 16 2 /16/ 平均每天eth收款次数 {} 机器统计 QS 2022/8/30 15:30:46
0000019 mix_token_deposit_count 行为 统计类 int EOA地址标签 19 1 / 混币存款次数总和 {} 机器统计 QS 2022/8/30 15:30:46
0000020 max_mix_token_deposit_count_per_day 行为 统计类 int EOA地址标签 19 19 2 /19/ 一天内混币存款次数最高的次数 {} 机器统计 QS 2022/8/30 15:30:46
0000021 avg_mix_token_deposit_count 行为 统计类 float EOA地址标签 19 19 2 /19/ 平均每天混币存款次数 {} 机器统计 QS 2022/8/30 15:30:46
0000022 mix_token_withdraw_count 行为 统计类 int EOA地址标签 22 1 / 混币赎回次数 {} 机器统计 QS 2022/8/30 15:30:46
0000023 max_mix_token_withdraw_count_per_day 行为 统计类 int EOA地址标签 22 22 2 /22/ 一天内混币赎回最高次数 {} 机器统计 QS 2022/8/30 15:30:46
0000024 avg_mix_token_withdraw_count 行为 统计类 float EOA地址标签 22 22 2 /22/ 平均每天混币赎回最高次数 {} 机器统计 QS 2022/8/30 15:30:46
0000025 is_tx_call_self 偏好 规则类 bool EOA地址标签 25 1 / 是否 tx_send, tx_receive, eth_send, eth_receive 的 form 和to 地址相同 {} 规则统计 QS 2022/8/30 15:30:46
0000026 is_deploy_contract 偏好 规则类 bool EOA地址标签 26 1 / 是否部署合约 {} 规则统计 QS 2022/8/30 15:30:46
0000027 is_mix_deposit 偏好 规则类 bool EOA地址标签 27 1 / 是否混币存款 {} 规则统计 QS 2022/8/30 15:30:46
0000028 is_mix_withdraw 偏好 规则类 bool EOA地址标签 28 1 / 是否混币取款数量大于1 {"mix_withdraw_counts": 1} 规则统计 QS 2022/8/30 15:30:46
0000029 action_count 行为 统计类 int EOA地址标签 29 1 / 所有action数量 {} 机器统计 QS 2022/8/30 15:30:46
0000030 avg_action_count 行为 统计类 float EOA地址标签 29 29 2 /29/ 平均每天action数量 {} 机器统计 QS 2022/8/30 15:30:46
0000031 max_action_count_per_day 行为 统计类 int EOA地址标签 29 29 2 /29/ 一天action最高的次数 {} 机器统计 QS 2022/8/30 15:30:46
0000032 max_action_one_block 行为 统计类 int EOA地址标签 29 29 2 /29/ 一个区块内的action最高的次数 {} 机器统计 QS 2022/8/30 15:30:46
0000033 max_action_one_address 行为 统计类 int EOA地址标签 29 29 2 /29/ 与同一个地址交互action最高的次数 {} 机器统计 QS 2022/8/30 15:30:46
0000034 is_high_freq_send_tx 偏好 规则类 bool EOA地址标签 34 1 / 是否存在高频发送交易(5分钟内有10个行为) {"limited_seconds": 600, "limited_action_counts": 10} 规则统计 QS 2022/8/30 15:30:46
0000035 is_high_freq_receive_tx 偏好 规则类 bool EOA地址标签 35 1 / 是否存在高频接收交易(5分钟内有10个行为) {"limited_seconds": 600, "limited_action_counts": 10} 规则统计 QS 2022/8/30 15:30:46
0000036 is_high_freq_send_token 偏好 规则类 bool EOA地址标签 36 1 / 是否存在高频对外转账token(5分钟内有10个行为) {"limited_seconds": 600, "limited_action_counts": 10} 规则统计 QS 2022/8/30 15:30:46
0000037 is_high_freq_receive_token 偏好 规则类 bool EOA地址标签 37 1 / 是否存在高频接收token转账(5分钟内有10个行为) {"limited_seconds": 600, "limited_action_counts": 10} 规则统计 QS 2022/8/30 15:30:46
0000038 call_contract_count 行为 统计类 int EOA地址标签 38 1 / 调用合约次数 {} 机器统计 QS 2022/8/30 15:30:46
0000039 is_transfer_after_token_approve_spend 偏好 规则类 bool EOA地址标签 39 1 / 是否在token_approve_spend后存在转账 {} 规则统计 QS 2022/8/30 15:30:46
0000040 eth_receive_from_address_ratio 行为 统计类 float EOA地址标签 16 16 2 /16/ eth_receive来源不同地址的比率(来源地址个数/eth_receive个数) {} 机器统计 QS 2022/8/30 15:30:46
0000041 avg_eth_receive_amount 行为 统计类 float EOA地址标签 16 16 2 /16/ 平均每一笔eth_receive转账资金 {} 机器统计 QS 2022/8/30 15:30:46
0000042 bot 属性 规则类 bool EOA地址标签 42 1 / 有 send_self_tx 标签或者经常在同一个区块中发送两笔交易 {} 规则统计 QS 2022/8/30 15:30:46
0000043 airdrop 行为 规则类 bool EOA地址标签 43 1 / 同一个区块内有2笔以上的 发送token 交易, 且一个小时内有 20 笔以上 {"transfer_counts_one_block":2, "max_transfer_one_hour": 20} 规则统计 QS 2022/8/30 15:30:46
0000044 fishing_probably 风险 规则类 bool EOA地址标签 44 1 / 疑似钓鱼攻击:有 token_approve_spend 行为并且之前两个地址没有任何关联 {} 规则统计 QS 2022/8/30 15:30:46
0000045 pk_thief_probably 风险 规则类 bool EOA地址标签 45 1 / 疑似私钥盗窃者,1个小时内转走holder所有币种的 transfer 行为 和 ether,两个地址之前没有任何关联 {"max_hours": 1} 规则统计 QS 2022/8/30 15:30:46
0000046 nft_player 属性 规则类 bool EOA地址标签 46 1 / 有 nft 转账行为 {} 规则统计 QS 2022/8/30 15:30:46
0000047 flash_loan_player 属性 规则类 bool EOA地址标签 47 1 / 闪电贷玩家 {} 规则统计 QS 2022/8/30 15:30:46
0000048 token 属性 规则类 bool 合约地址标签 48 1 / 有 transfer 事件 {} 规则统计 QS 2022/8/30 15:30:46
0000049 erc20 属性 规则类 bool 合约地址标签 49 1 / 可以调 decimals 接口 {} 规则统计 QS 2022/8/30 15:30:46
0000050 nft 属性 规则类 bool 合约地址标签 50 1 / nft合约 {} 规则统计 QS 2022/8/30 15:30:46
0000051 Popular 属性 规则类 bool 合约地址标签 51 1 / 有超过500个活跃地址,持续三个月 {"max_active_address": 500, "limit_month": 3} 机器统计 QS 2022/8/30 15:30:46
0000052 Personal 属性 规则类 bool 合约地址标签 52 1 / 历史只有1个活跃地址 {"historical_active_address_counts": 1} 规则统计 QS 2022/8/30 15:30:46
0000053 Bot 属性 规则类 bool 合约地址标签 53 1 / 地址是 personal, 且一个区块内有2笔交易 {"max_transfer_one_block": 2} 规则统计 QS 2022/8/30 15:30:46
0000054 Airdrop 属性 规则类 bool 合约地址标签 54 1 / 一个区块内有2笔以上的token转账 {"max_transfer_one_block": 2} 规则统计 QS 2022/8/30 15:30:46
0000055 Arbitrage 属性 规则类 bool 合约地址标签 55 2 / 同一个交易内,有两笔相反的转账顺序 {} 规则统计 QS 2022/8/30 15:30:46
0000056 flash_loan 属性 规则类 bool 合约地址标签 55 55 1 /55/ 闪电贷合约 {} 规则统计 QS 2022/8/30 15:30:46
0000057 huge_custom 偏好 规则类 bool 合约地址标签 57 1 / 超过 500 个用户地址 {"max_address_counts": 500} 规则统计 QS 2022/8/30 15:30:46
0000058 huge_activate_customs 偏好 规则类 bool 合约地址标签 58 1 / 超过100个活跃用户 {"max_active_address_counts": 100} 规则统计 QS 2022/8/30 15:30:46
0000059 huge_increase_customs 偏好 规则类 bool 合约地址标签 59 1 / 每日新增 50个用户 {"max_new_address_counts": 50} 规则统计 QS 2022/8/30 15:30:46
0000060 internal_called 行为 规则类 bool 合约地址标签 60 1 / 触发了事件, 但交易的to 地址不是合约 {} 规则统计 QS 2022/8/30 15:30:46
0000061 project_risk_level 风险 挖掘类 float 项目标签 61 1 / 项目的风险等级,有其他标签计算得到 {} 算法预测 QS 2022/8/30 15:30:46
0000061 project_price_risk 风险 挖掘类 float 项目标签 61 61 1 /61/ 项目的价格风险 {} 算法预测 QS 2022/8/30 15:30:46
0000061 project_operation_risk 风险 挖掘类 float 项目标签 61 61 1 /61/ 项目的运营风险 {} 算法预测 QS 2022/8/30 15:30:46
0000061 project_code_risk 风险 挖掘类 float 项目标签 62 61 1 /61/ 项目的代码风险 {} 算法预测 QS 2022/8/30 15:30:46

fairy-proof_portrait_system's People

Contributors

magicianqi avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.