规则圈选是按照指定条件从画像数据中找到满足要求的用户并沉淀为人群的一种常见的人群创建方式。所谓的规则就是条件的组合,比如北京市男性用户,最近一周平均在线时长介于2到10分钟之间的中老年用户。 人群创建引擎读取到规则人群配置信息后,首先判断是否适合通过BitMap实现人群圈选,如果适合,可以获取标签的BitMap在内存中进行交、并、差操作;不适合BitMap实现的可以兜底通过ClickHouse Hive表中的人群数据主要用于离线数据分析场景,很多业务使用人群之后需要通过人群结果表进行效果分析。图5-13展示了人群结果表的表结构设计,人群crowd_id作为分区键,分区下包含该人群所有用户。 每一个人群最终都会存储在Hive表和OSS中,但是不同人群创建方式优先产出的人群存储类型不同,所以画像平台需要支持Hive和OSS之间数据的相互转换。 ,在内存中构建BitMap后存储到OSS中;BitMapToHive需要将内存中的数据快速写入Hive表,主要分为写入本地文件、上传到HDFS以及加载成Hive表三个步骤,该过程与第3章中通过文件导入创建标签类似
Hive导入和SQL导入方式创建的人群数据直接存储到Hive表中,后续需要通过HiveToBitmap将人群数据写入BitMap并存储在OSS中。 通过TXT或者CSV文件创建人群,其文件中只需要保存一列UserId数据。文件通过接口上传到服务端后可以解析其中的每一行数据,数据经处理后可以直接写入BitMap并存储到OSS中。 图5-22展示了通过上传文件创建人群的流程图,其中展示了DeviceId文件上传的处理流程,DeviceId需要做一次ID转换之后再写入人群BitMap。 文件上传后同步创建人群耗时比较久,为了提高用户体验,创建过程可以实现异步处理,即通过接口上传的文件先保存到服务端,然后异步解析文件并创建人群。 导入人群是画像平台最常用的人群创建方式之一,其实现了将各类数据源沉淀为人群的功能,支持更灵活的人群创建方式,拓展了画像平台数据范围。
人群LookALike是给定种子人群,然后通过技术手段找到与该种子人群相似的用户群体。 图5-26展示了基于向量求LookALike人群的主要流程。图片基于种子人群特征分布计算相似人群。 图片基于分类算法计算相似人群。把种子人群当作正样本,其他非种子人群(或者其他人群)当作负样本,通过训练分类模型计算出满足条件的用户并构建目标人群。 目前也有利用社交网络进行人群LookALike的实践方案,通过好友关系找到种子人群中所有用户的几度好友并构建目标人群。挖掘人群是指定优化目标,借助算法能力找到满足要求的用户并构建人群。 人群挖掘的思路是先找到训练样本(种子人群),然后通过LookALike的思路扩展种子人群。该方式与人群LookALike不同的是,人群挖掘的结果中可以包含种子人群中的用户数据。
上文提到了使用画像宽表可以便捷的创建人群,本文介绍人群创建所依赖的另外一种数据组织形式:标签BitMap。 BitMap以上特点都非常适合存储人群数据,也决定了其在画像平台的广泛使用。基于Hive标签数据表可以生成BitMap,图5-10展示了性别和常住省标签生成BitMap的示意图。 多个RoaringBitMap可以在内存中直接进行交、并、差操作,最终实现人群的创建。 基于宽表中全量用户的明细数据可以实现所有的人群圈选功能,但是采用BitMap方案的人群创建速度相比宽表模式可以提升50%以上。BitMap适用的标签类型和业务场景有限,要结合实际的数据进行判断。 业界一般使用混合模式,优先通过BitMap进行人群创建,不适用的场景下兜底使用画像宽表进行人群圈选。采用混合模式要考虑对齐画像宽表和BitMap的标签时间,这增加了工程的实现复杂度。
本节主要介绍人群创建所依赖的画像宽表的生成方式。为什么要创建画像宽表?基于原始的标签数据表进行人群圈选有什么问题?如何生成画像宽表?针对这些问题本节会给出详细解答。 ,如果创建过程直接关联到每个标签的源数据表,那么任何源数据表的改动或者异常都将影响后续的人群创建功能。 通过分散表创建人群将造成标签数据表的权限申请、审批、变更流程异常繁琐 画像平台作为一个“用户”申请所有标签数据表权限来构建一张宽表,普通用户创建人群的过程只与宽表交互,避免了用户直接申请所有上游数据表权限的问题 数据解耦 人群创建语句涉及多张Hive数据表,当数据表名称或者列名称变更时,需要修改所有包含该标签的人群创建语句。 标签可以采取随机分组策略,即所有标签随机分配到某个分组下,每个中间宽表所包含的标签量和计算所需的资源量基本一致;也可以按标签的就绪时间段进行分组,比如早上8点到10点就绪的标签可以分为一组,这样可以把中间宽表的生产时间打散
虽然画像数据是浓缩精简后的核心数据,但在很多人群圈选场景中依赖行为明细数据,比如运营人员希望找出2022-08-15 10:00:00到2022-08-15 12:00:00之间通过手机客户端点赞了某篇文章的用户
RAID10创建步骤主要有7步:1.硬件准备;2.配置RAID卡或存储设备;3.选择RAID级别;4.添加硬盘到RAID 10组;5.添加硬盘到RAID 10组;6.保存并退出配置;7. ### RAID 10的基本原理RAID 10实际上是RAID 1和RAID 0的组合体,它首先创建两组RAID 1镜像,然后在两组RAID 1之间再创建RAID 0,即先将硬盘两两分组,每组内部为RAID ### RAID 10的创建步骤创建RAID 10通常需要专业的存储设备,如服务器内置的RAID卡或独立的RAID存储设备。以下是一般性的创建步骤,具体操作可能因设备型号和厂商的不同而有所差异。 ### 创建RAID 10要注意什么?**备份数据**:在创建RAID 10之前,务必备份所有重要数据,以防万一操作失误导致数据丢失。 以上就是RAID10创建详细步骤的具体内容,希望可以帮助到大家。
main方法主要功能是创建ActivityThread且关联,创建Looper死循环不让程序退出。 //为主线程创建loop对象,我们在主线程使用Handler时候没有初始化都可以使用,因为这里做了初始化。 创建LoadedApk对象并且用于创建Application。 mRootActivityContainer.attachApplication(wpc); } 我们可以看出下面代码realStartActivityLocked,这个都是我们真正发起创建 Activity,LaunchActivityItem表示一个创建任务。
第10章 使用 Kotlin 创建 DSL 使用DSL的编程风格,可以让程序更加简单干净、直观简洁。当然,我们也可以创建自己的 DSL。 创建外部DSL和创建一种通用的编程语言的过程是相似的,它可以是编译型或者解释型的。它具有形式化的文法,只允许使用良好定义的关键字和表达式类型。 本节我们就通过实现一个极简的http DSL来学习创建 DSL 背后的基本原理。 = null var timeout: Long = 10 internal var success: (String) -> Unit = {} internal var method 请求方法,例如 Get、Post 等,不区分大小写 body 请求头,为了简单起见我们直接使用 OkHttp的RequestBody类型 timeout 超时时间ms,我们设置了默认值是10s
Counting Varying Density Crowds Through Attention Guided Detection and Density Estimation CVPR2018 本文针对人群密度问题 将 检测方法和回归方法结合到一起,以此来提升人群密度估计精度 人群密度估计问题目前主要的方法有基于检测的和基于回归的方法。 在人群密度小的时候,基于检测的方法效果更好。在人群密度较大的时候,基于回归方法的效果比较好。 ? ? 本文的思路就是将 检测方法和回归方法结合起来,各取所长。
相似人群字典表 :return: 相似度最高的相似人群 """ user_similarity_list = sorted(cluster_dic.iteritems(), key cluster_dimension_feature:群画像某个维度的特征 :param user_dimension:用户某个维度的特征 :param ratio:user的权重,公式为相似度/(相似度+10 ),区间为(1/3,10/11) :return:指定维度的群画像 """ if user_dimension ! : 相似人群的相似度字典表 :return: 相似人群画像字典表 """ cluster_profile_rs = {} for sim_user_obj in sim_users_profile_array sim_num = Decimal(similarity) # 用户对应的权重 rate = Decimal(sim_num / (10
摘要:本文主要讲解使用SpringBoot创建定时任务。 项目中经常会需要做一些定时处理的任务,比如每间隔多久做个统计,发个邮件,清理个数据。 这时候就要用到定时任务,SpringBoot中,创建定时任务非常简单,具体步骤如下: 1.注解开启定时任务 在程序的启动类上加上@EnableScheduling注解,就会自动启用定时任务。 单独创建一个类,用来存放定时任务,然后在每个定时任务方法上,用注解标明定时任务的执行周期。 我这里以每间隔10秒打印一下当前系统时间为例,注意@Component注解。 秒执行一次 @Scheduled(cron="*/5 * * * * *") :通过cron表达式定义规则 注意,这里的时间,单位是毫秒,1秒=1000毫秒 4.运行项目 项目启动后,我们就会在控制台看到每隔10
时间轴可以看到这几天执行过的任务,查找比较方便 win+Ctrl+D 新建虚拟桌面-----win+Ctrl+F4关闭虚拟桌面 一个电脑桌面有时打开多个文档会看着眼花缭乱,这时就可以使用win+Ctrl+D来创建多个虚拟桌面
该网络在几个常用的公开人群密度估计数据库上取得了不错的效果。 1 Introduction 拥挤场景解析的发展从简单的人群数值估计到 人群密度图估计,人群密度图可以提供额外的信息,因为同样数量的人可以分布在不同的位置,如下图所示 ? 生成准确的人群分布图挑战性比较大,其中一个主要的困难就是离散化的问题,人在图像中不是只占用一个像素,密度图需要保持局部邻域的连续性。其他的困难包括场景的多样性,相机角度的多样性。 以前基于CNN网络的人群密度估计主要采用了 multi-scale architectures,虽然取得了不错的性能,但是存在两个问题:当网络变深的时候, the large amount of training 人群密度估计从方法上来说可以分为三大类:detection-based methods, regression-based methods, and density estimation-based methods
Scale-adaptive Convolutional Nerual Network https://github.com/miao0913/SaCNN-CrowdCounting-Tencent_Youtu 人群分析 Towards perspective-free object counting with deep learning ECCV2016 https://github.com/gramuah/ccnn 人群计数 Density Estimation for Crowd Counting AVSS 2017 https://github.com/svishwa/crowdcount-cascaded-mtl 人群计数 /hosseinm/med Panic,Fight,Congestion,Obstacle ,Neutral 人群异常检测 Anomaly Detection and Localization in Crowded Scenes 数据库 http://www.svcl.ucsd.edu/projects/anomaly/ 人群分析 Deep Spatio-Temporal Residual
人群创建成功后会存储在Hive表和OSS中,画像平台用户有时需要拉取人群数据并应用到一些业务中。 比如用户希望在Push平台上针对指定人群下的所有用户推送消息,此时可以使用画像平台接口拉取人群数据;在七夕活动中,运营人员投放使用了多个人群,为了分析不同人群的转化效果,此时需要将人群结果的Hive表提供给数据分析师使用 获取人群基本信息接口主要用于查询人群基本信息,其中包括人群名称、用户数量、人群状态、创建者、创建规则等,该接口可以使用缓存来提高接口性能。 当业务方需要感知人群状态变化时,可以定期调用人群基本信息接口,对比人群前后状态就可以知道人群状态是否变更。比如在Push平台上置了一个定时更新人群,当人群数据更新后需要再次给人群下的用户推送消息。 此时Push侧需要及时感知人群状态变化,当发现人群重新创建成功后再次进行Push操作。
恢复数据库 准备完数据后,会多出来一个文件 [root@slave-test 2015-10-12_15-24-06]# ll /tmp/xtrabackup_* -rw-r--r-- 1 root root xtrabackup_info -rw-r----- 1 root root 13824 Oct 12 20:02 /tmp/xtrabackup_logfile [root@slave-test 2015-10 -12_15-24-06]# cat /tmp/xtrabackup_binlog_info mysql-bin.000009 1509223 [root@slave-test 2015-10-12_ 15-24-06]# cat xtrabackup_binlog_info mysql-bin.000009 1509223 [root@slave-test 2015-10-12_15-24-06] 在合适的位置创建一个空文件夹,用来存放数据文件 [root@slave-test lib]# mv mysql/ mysql.old [root@slave-test lib]# ln -s /data
在 MySQL 中,一个完整的数据存储过程总共有 4 步,分别是创建数据库、确认字段、创建数据表、插入数据。 我们要先创建一个数据库,而不是直接创建数据表呢? 所以,我们就从创建数据库开始。 创建和管理数据库 # 2.1 创建数据库 方式 1:创建数据库 CREATE DATABASE 数据库名; 方式 2:创建数据库并指定字符集 CREATE DATABASE 数据库名 CHARACTER 则忽略创建语句,不再创建数据库。 ,则创建数据表;如果当前数据库中已经存在要创建的数据表,则忽略建表语句,不再创建数据表。
“物以类聚,人以群分”这句古语不仅揭示了物与人的自组织趋向,更隐含了“聚类”和“人群”之间的内在联系。 例如在现代数字广告投放系统中,最为关键的“人群定向”功能正是通过“聚类”算法得以实现的。 明白了这一点,也就触摸到了人群定向的天花板–不可能百分之百精准。 如何从广泛的受众中提炼目标人群呢? 正是依靠受众行为分析。 下面我们以易传媒的广告投放算法为例,浅析一下怎样由预先标注的关键词标签,一步步建立完整的受众行为分析模型,挖掘出具有相似行为特征的人群,提炼人群的属性特征,最终进行最合适的广告投放的。 人群定向投放 作为人群定向广告正式投放前的最后一步,受众聚类和结构化的人群分类将进行匹配映射。这种映射是利用二者标签集合的重合度来实现的。 根据第一节所述关键词模型的优势,它至少有如下两个用途: (1)当一个投放策略的人群定向选择了”奢侈品”或者”汽车”时,广告允许被指定投放给受众聚类φ所包含的Cookies. (2)利用两个标签在一个细分人群中的内在关联性
of CNNs Specialized to Specific Appearance for Crowd Counting https://arxiv.org/abs/1703.09393 本文是人群计数的 ,不是人群密度估计。 这里主要的思路是针对不同场景的 scale and congestion 造成图像块的 Appearance 差别很大,这里我们使用多个小 CNN 来估计总人群。 另外适应一个大点的 CNN 对 图像块进行分类,这种分类主要依据人群密度大小。类别的概率作为每个小 CNN 的权重。 Appearance 的差异性 ?