规则圈选是按照指定条件从画像数据中找到满足要求的用户并沉淀为人群的一种常见的人群创建方式。所谓的规则就是条件的组合,比如北京市男性用户,最近一周平均在线时长介于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的Hive表数据写入到ClickHouse表中,该操作可以提高后续查询BitMap的效率;最后在人群创建过程中从数据表中查询出 多个RoaringBitMap可以在内存中直接进行交、并、差操作,最终实现人群的创建。 基于宽表中全量用户的明细数据可以实现所有的人群圈选功能,但是采用BitMap方案的人群创建速度相比宽表模式可以提升50%以上。BitMap适用的标签类型和业务场景有限,要结合实际的数据进行判断。 业界一般使用混合模式,优先通过BitMap进行人群创建,不适用的场景下兜底使用画像宽表进行人群圈选。采用混合模式要考虑对齐画像宽表和BitMap的标签时间,这增加了工程的实现复杂度。
本节主要介绍人群创建所依赖的画像宽表的生成方式。为什么要创建画像宽表?基于原始的标签数据表进行人群圈选有什么问题?如何生成画像宽表?针对这些问题本节会给出详细解答。 ,如果创建过程直接关联到每个标签的源数据表,那么任何源数据表的改动或者异常都将影响后续的人群创建功能。 为了实现人群创建功能,用户需要申请所有标签数据表权限。当表权限变更时,还需要及时同步每一个用户再次申请权限。 通过分散表创建人群将造成标签数据表的权限申请、审批、变更流程异常繁琐 画像平台作为一个“用户”申请所有标签数据表权限来构建一张宽表,普通用户创建人群的过程只与宽表交互,避免了用户直接申请所有上游数据表权限的问题 数据解耦 人群创建语句涉及多张Hive数据表,当数据表名称或者列名称变更时,需要修改所有包含该标签的人群创建语句。
虽然画像数据是浓缩精简后的核心数据,但在很多人群圈选场景中依赖行为明细数据,比如运营人员希望找出2022-08-15 10:00:00到2022-08-15 12:00:00之间通过手机客户端点赞了某篇文章的用户
hat{\tau}(S_l) = \hat{\mu_1}(S_l) -\hat{\mu_0}(S_l) \quad \text{叶节点CATE}\\ &F(S_l) = N_l * \hat{\tau}^2(
Counting Varying Density Crowds Through Attention Guided Detection and Density Estimation CVPR2018 本文针对人群密度问题 将 检测方法和回归方法结合到一起,以此来提升人群密度估计精度 人群密度估计问题目前主要的方法有基于检测的和基于回归的方法。 在人群密度小的时候,基于检测的方法效果更好。在人群密度较大的时候,基于回归方法的效果比较好。 ? ? 本文的思路就是将 检测方法和回归方法结合起来,各取所长。
上文说到已经创建了app,但是此时的项目里只有两个光秃秃的文件。要完成一个完整的网站,还需要在上面添加handler和templates。 添加handler 添加蓝图 我们在项目中创建包handlers,在里面添加__init__.py和index.py两个文件。 在__init__.py中输入如下内容,创建蓝图games_bp,它的前缀是/games,也就是说,这个蓝图下的handler都要使用/games前缀才能访问。 在index.py中创建一个sanic的handler,并把它添加到蓝图。 6) app = Sanic(__name__) # 在这里导入blueprints,注意顺序在app之后,因为games_bp引入的包也可能导入app这个神对象 # 这样的循环依赖会导致app 被创建两次
,格式为用户编号:相同阅读量,相似用户之间以逗号分隔 sim_num BIGINT 相似人群的人数 update_date string 数据日期 2、基础用户画像存在MongoDB中 Image [ 2].png 字段 含义 _id 用户id profile(离线)positive(实时) 用户正画像(喜欢),每个维度以分号间隔,每个子维度以逗号间隔,值格式为key_id:weight,维度含义依次为一级分类 (cluster_dic, sim_users_max_size): """ # 相似人群数量限制,dic->list :param sim_users_max_size: 相似人群的最大值 :type cluster_dic: 字典表 :param cluster_dic:相似人群字典表 :return: 相似度最高的相似人群 """ user_similarity_list : 相似人群的相似度字典表 :return: 相似人群画像字典表 """ cluster_profile_rs = {} for sim_user_obj in sim_users_profile_array
Understanding the Highly Congested Scenes CVPR2018 针对复杂场景的拥挤场景理解我们提出了一个 CSRNet 网络,该网络主要包括两个部分,前端使用一个 卷积网络用于 2D 该网络在几个常用的公开人群密度估计数据库上取得了不错的效果。 1 Introduction 拥挤场景解析的发展从简单的人群数值估计到 人群密度图估计,人群密度图可以提供额外的信息,因为同样数量的人可以分布在不同的位置,如下图所示 ? 生成准确的人群分布图挑战性比较大,其中一个主要的困难就是离散化的问题,人在图像中不是只占用一个像素,密度图需要保持局部邻域的连续性。其他的困难包括场景的多样性,相机角度的多样性。 的密度图估计多数采用了 multi-column based architecture (MCNN) 的架构,我们观察到这种结构存在几个问题: 1)Multi-column CNNs 比较难训练 2)
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
模块化设计便于项目创建、更新和维护。 import os from pathlib import Path ---- 2. 2 菜单界面结构创建 ---- 2.2.1 html 文件结构 ---- 首先进入 /game/templates 对象,接下来实现这个创建 js 对象的文件。 进入 /game/static/js/,同样创建三个文件夹 menu,playground,settings,再创建一个总文件 zbase.js。 : white; width: 18vw; height: 7vh; font-size: 6vh; font-style: italic; padding: 2vh
Kanass是一款国产开源免费的项目管理工具,工具简洁易用,开源免费,本文就从如何创建第一个项目来开始kanass上手之旅吧。1. 2. 成员设置1)初始化成员新建的项目会把创建项目的人和admin用户都加入到当前项目,并设置为项目管理员角色给最高权限;2)加入成员进入项目把与项目有关的用户加入项目,便于开发角色设置1)内置角色权限新建项目时会初始化出普通角色 ,admin,项目超级管理员三个角色初始化的三个角色不可删除,可以自定义新的角色,自定义可以删除2)项目超级管理员项目超级管理员拥有所有的权限,不能修改权限范围3)默认角色把某个角色设置为默认角色,新加入的成员就被赋予默认角色 ,若要自定义事项类型,也要自定义流程用于新类型的事项状态内置流程项目创建时候会初始化基本事项类型,分别对应需求、任务、缺陷流程,不可删除修改自定义流程自定义事项类型是需要关联自定义的流程,就需要新创建自定义的流程
2 引言 最近的ICCV2021,腾讯优图出品了一个人群基数相关论文《Rethinking Counting and Localization in Crowds: A Purely Point-Based 论文:https://arxiv.org/pdf/2107.12858.pdf 相比仅仅估计人群中的总人数,在人群中定位每个个体更为切合后续高阶人群分析任务的实际需求。 优图团队提出了一种完全基于点的全新框架,可同时用于人群计数和个体定位。 此外,作为该框架一个直观解法,研究者给出了一个示例模型,叫做点对点网络(P2PNet)。P2PNet忽略了所有冗余步骤,直接预测一系列人头点的集合来定位图像中的人群个体,这完全与真实人工标注保持一致。 实验证明,P2PNet不光在人群计数基准上显著超越了已有SOTA方法,还实现了非常高的定位精度。
现在我们已经基本知道了Ionic2 app的布局,接下来我们来走一遍在我们的app里创建和导航页面的过程。 创建页面 接下来我们看看导入的HelloIonicPage 。在 src/pages/hello-ionic/目录下,打开hello-ionic.ts文件。 你可能注意到每个页面有一个目录。 这将创建一个页面,提供一个包含所有Ionic指令的Angular组件,加载使用Ionic的导航系统。 创建附加页面 创建附加页面,我们只需要确保正确设置标题和其他我们希望导航条显示的东西。 itemTapped(event, item) { this.navCtrl.push(ItemDetailsPage, { item: item }); } } 这个页面创建了一个包含多个数据项的列表页
要将我们在上一节中编写的代码转移到使用 async 和 await,我们首先需要创建自己的 Task 类,因为函数不能具有 await dunder 方法。 完成 Task 对象的创建后,我们使用 create_task 辅助函数将它加入到事件循环中,这将安排它按计划执行。 接下来,我们将构建事件循环管理器,它负责驱动任务的执行。 因此,为了解决这个问题,我将代码迁移到了另一个函数中,现在实际的 sleep 函数会创建一个任务对象并等待它完成。 task.finished = True else: event_loop.put(task) 既然我们已经成功构建了事件循环、任务创建机制和 此外,既然我们现在拥有了完整的 asyncio 库的功能,就无需为了同时等待两个任务而分别创建它们;我们完全可以使用 asyncio.gather() 这样的函数来同时管理多个任务。
人群创建成功后会存储在Hive表和OSS中,画像平台用户有时需要拉取人群数据并应用到一些业务中。 比如用户希望在Push平台上针对指定人群下的所有用户推送消息,此时可以使用画像平台接口拉取人群数据;在七夕活动中,运营人员投放使用了多个人群,为了分析不同人群的转化效果,此时需要将人群结果的Hive表提供给数据分析师使用 获取人群基本信息接口主要用于查询人群基本信息,其中包括人群名称、用户数量、人群状态、创建者、创建规则等,该接口可以使用缓存来提高接口性能。 当业务方需要感知人群状态变化时,可以定期调用人群基本信息接口,对比人群前后状态就可以知道人群状态是否变更。比如在Push平台上置了一个定时更新人群,当人群数据更新后需要再次给人群下的用户推送消息。 此时Push侧需要及时感知人群状态变化,当发现人群重新创建成功后再次进行Push操作。
明白了这一点,也就触摸到了人群定向的天花板–不可能百分之百精准。 如何从广泛的受众中提炼目标人群呢? 正是依靠受众行为分析。 {2,90,15,0,0,1}, 则被加权归一化后可能有θ(σ2)=0.8(点击行为的权重比浏览高);此外受众A还拥有其它一些标签,但权重系数比较低。 该指标R^2的取值范围在0与1之间,它总是随着分类的个数减少而变小,而类的个数进一步减少不应以R^2大为减小作为代价。测试结果R^2的值在0.80左右,这表明易传媒这套算法的聚类效果比较好。 人群定向投放 作为人群定向广告正式投放前的最后一步,受众聚类和结构化的人群分类将进行匹配映射。这种映射是利用二者标签集合的重合度来实现的。 根据第一节所述关键词模型的优势,它至少有如下两个用途: (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 的差异性 ?