众安保险 CDP 平台:借助 Apache Doris 打破数据孤岛,人群圈选提速4倍

Doris:多源数据目录(Multi-Catalog) 多源数据目录(Multi-Catalog)功能,旨在能够更方便对接外部数据目录,以增强Doris的数据湖分析和联邦数据查询能力。 阅读详情

导读:随着业务在金融、保险和商城领域的不断扩展,众安保险建设 CDP 平台以提供自动化营销数据支持。早期 CDP 平台依赖于 Spark + Impala + Hbase + Nebula 复杂的技术组合,这不仅导致数据分析形成数据孤岛,还带来高昂的管理及维护成本。为解决该问题,众安保险引入 Apache Doris,替换了早期复杂的技术组合,不仅降低了系统的复杂性,打破了数据孤岛,更提升了数据处理的效率。

众安在线财产保险股份有限公司是中国首家互联网保险公司,由蚂蚁金服、中国平安和腾讯于 2013 年联合发起设立。众安专注于应用新技术重塑保险价值链,围绕健康、数字生活、消费金融、汽车四大生态,以科技服务新生代,为其提供个性化、定制化、智能化的新保险。业务和关联公司的业务包括:众安保险、众安医疗、众安小贷、众安科技、众安经纪、众安国际、众安银行等。截至 2023 年中,众安服务超过 5 亿用户,累计出具约 574 亿张保单。

然而,随着业务在金融、保险和商城领域的不断扩展,众安保险面临用户数据管理的挑战。用户信息来源于公众号、小程序和 APP 等多个渠道,这些数据不仅碎片化,而且多样化。同时,运营渠道也涵盖了自营、联营和外部投放等多种途径,导致数据进一步分散。这种数据孤岛现象使得众安保险难以形成完整的用户融合体系,从而无法实现对用户的精准识别和实时营销。

CDP 建设目标及方案

为了解决这一问题,众安保险建设了 CDP 平台。该平台的核心职责是整合所有用户数据,构建全面的用户标签和客群体系,并利用其强大的数据分析能力为自动化营销提供数据支持。

众安保险CDP 建设目标及方案.png

CDP 平台的建设目标主要包括以下几点:

  • 快速数据集成: CDP 需支持集成常见的关系性数据库(如 MySQL、PG 等 )和数据仓库同(如 Hive、MaxCompute 等),同时还需要整合实时数据流(如 Kafka 等)。
  • 精准用户识别:在复杂的业务体系中,CDP 平台需能够灵活整合多种 ID 类型,形成统一的用户视图,为下游的实时营销场景提供支撑。
  • 灵活的用户标签和强大的分群能力:这是 CDP 平台的核心建设目标,旨在提供全面、深度的用户洞察,精准满足用户需求。
  • 多维度实时分析:支持对用户画像、用户旅程和营销效果的实时跟踪与回收。为优化营销策略和提升用户参与度提供有力的支持。

基于上述建设目标,众安保险目前已形成了完整的 CDP 解决方案,该方案包括以下几个关键步骤:

众安保险 CDP 解决方案方案.png

  1. 全域数据采集:CDP 平台通过实时和离线数据采集方式,实现对全域数据的整合。利用 Flink 进行实时数据采集,同时建设离线数仓以整合多渠道数据,确保高质量的数据资产沉淀。
  2. 用户数据融合:通过 ID Mapping 技术,可将现有的用户数据进行融合,打破数据孤岛。即将用户手机、用户身份证、设备指纹、OpenID 等用户身份进行融合,形成统一的用户标识(OneID)。
  3. 标签和客群管理:CDP 平台支持多维度标签的建设,包含用户属性、用户行为、业务交易状态等。同时,通过规则客群的圈选能力实力客群的精细划分。
  4. 用户数据分析:基于丰富的用户标签数据,CDP 平台提供用户画像洞察功能,支持实时效果评估和营销漏斗分析。
  5. 用户数据服务:CDP 平台提供多维度的数据接口服务能力,包括用户标签、客群、分层和实时事件等,赋能用户全链路智能营销。

CDP 平台架构的演进历程

在初步了解了 CDP 平台的建设初衷和解决方案之后,我们将深入挖掘其演进历程,探索它如何逐步蜕变为众安保险统一、高效且不可或缺的核心基础设施。本文将重点分享 CDP 平台的建设过程及其在实际生产中的应用实践。

众安保险 CDP 平台架构的演进历程.png

CDP 产品架构如上图所示。全域数据接入之后,这些数据就可以搭建用户数据中心、实时事件中心、客群画像以及营销流程。用户数据中心是客群画像的基石,并与客群画像、实时事件中心一同支撑营销流程的数据需求。数据服务层则包括用户数据服务、客群圈选、营销策略、实时事件、 AB 实验和实时效果分析回收在内的全方位数据服务,满足各业务场景的数据需求。

架构 1.0:多个技术栈,形成数据孤岛

众安保险架构 1.0:多个技术栈,形成数据孤岛.png

CDP 平台架构 1.0 如上图所示,离线数据和实时数据的处理流程如下:

  • 离线数据:通过 ETL 方式集成各业务线的数据库数据,包括行为埋点数据、日志数据等,并将这些数据抽取数仓 DWS 层。随后,利用 Spark 作业将 DWS 层数据抽取到 Impala 中,进行离线的标签计算和客群的圈选。同时,我们还通过 Spark 抽取 DWS 层业务体系里的用户点边关系,并将其集成到 Nebula 图数据库中,提供全面的点边关系计算、边距计算以及 One ID 计算功能。
  • 实时数据:采用 Kafka 实时回收所有的业务线的 Binlog 数据、行为埋点数据以及各业务线的事件上报数据,在 Flink 中实现实时标签的配置化计算,并通过 Flink Checkpoint 进行复杂的实时指标计算和事件组合。最终将实时标签存储在 Hbase 中,以便为各业务线提供点查服务。

然而,从架构图中可以明显看出,标签计算和 ID 图谱计算这一层涉及了非常多的技术栈,包含 Impala、Spark、Nebula 以及 Hbase。这些过多的组件导致了离线标签、实时标签以及图数据存储的不统一、各场景数据分散存储,形成了数据孤岛。

在这种情况下,当需进行整体视图计算或为上层提供服务时,就需要打通所有的数据,这无疑增加了大量数据传输和数据重复存储的成本。此外,由于各类数据存储方案的差异,还需要使用较大的 CDH 集群和 Nebula 图数据库集群,进一步提高了集群资源与维护成本。

架构 2.0:统一技术栈,打破数据孤岛

为了解决数据存储的不一致性和高昂成本问题,我们决定进行架构升级,并选择 Apache Doris 作为核心组件。我们的升级目标是希望通过引入 Doris 来统一技术栈,实现实时和离线数据存储和计算的整合,从而打破数据孤岛,大幅度降低数据存储和资源维护的成本。在实际的应用中,Doris 完美地满足了我们的需求,使得整体架构变得更精简高效。

众安保险架构 2.0:统一技术栈,打破数据孤岛.png

对于离线数据,我们采用了 Doris 的 Stream Load 功能,轻松地从离线数仓中将数据抽取到 Doris 中。而对于实时数据,则通过 Flink Connector 与 Stream Load 的结合,将实时事件和实时标签无缝导入到 Doris 中。基于 Doris 强大的向量化计算引擎,我们不仅实现了 One ID 计算、离线/实时标签的存储和计算、客群圈选、实时事件存储,还支持了实时分析等多样化需求,真正实现了技术栈的统一。

引入 Doris 后,我们还收获了以下显著的收益:

  • 架构简洁,运维成本降低 :引入 Doris 之前,我们需要额外维护 CDH 集群和 Nebula 集群。而现在,仅凭一个 Doris 集群就可以完成所有的工作,显著降低运维成本。此外,Doris 还提供的完善集群监控设施也极大方便了我们对集群的便捷管理。
  • 支持 SQL,快速上手 : Doris 兼容 MySQL 协议,这意味着对于已经熟悉 MySQL 的开发者来说,无需额外的学习成本就能快速上手操作。
  • 丰富的数据导入形式 :Doris 提供了丰富且便捷的数据导入方式,使数据库迁移和数据导入变得高效和方便。用户可以根据实际需求选择适合的导入方式,以快速完成数据迁移和导入操作。

Doris for CDP 在业务场景中的实践

全域数据采集

为满足不同场景的数据集成需求,CDP 平台主要分为三个板块:

  • 离线数据导入:针对标签计算、实时客群预估与圈选,以及标签和客群多维画像分析等场景,我们采用 DataX 工具,通过 Stream Load 方式将离线数据高效写入到 Doris 里。为确保 Stream Load 的稳定性,我们在线上对 30 多个线程并发导入进行测试,结果显示,每秒 Upsert (写入或更新) 数量高达 30+ 万条。对于我们当前的一级用户量来说,导入效果可以很好满足我们的需求。
  • 部分列更新:在实时写入场景中,当使用 Flink 实时写入标签数据时,需要精确到单个用户和标签的实时更新和插入,流程相对复杂。而 Doris Stream Load 可以开启部分列更新 partial_columns=true 来满足这一需求,确保每个用户和标签都能得到及时、准确的更新。
  • 外部数据源对接:在实时分析报表场景中,经常需要跨多个数据源的交叉分析。Doris 的 Multi-Catalog 功能可以更方便对接外部数据目录,无需进行数据迁移或导入,即可进行外部数据源的联邦查询。无论是基于 Hive 或 MaxCompute 的查询,还是 JDBC 业务线的数据查询,都能迅速获得精准的分析结果,极大提升了查询效率。

OneID

1. 构建 ID 图谱

Apache Doris-众安保险构建 ID 图谱.png

我们在现有系统中配置了 ID 图谱的点关系,这些关系以用户为中心,形成了复杂的网络结构。举例说明:假设某用户在体系 A 拥有用户 ID,并且绑定的公众号,这样就形成了 Open ID 绑定关系。随着用户的使用,他可能注册了手机号,那么手机号跟体系 A 用户 ID 之间便建立了绑定关系。如果用户在体系 A 也进行了实名,那么身份证和注册手机号也会建立绑定关系。

随着时间的推移,该用户可能进入到体系 B 中,并注册体系 B 账户。这时,与该用户相关的体系 A 用户 ID、手机号、身份证和体系 B 账户之间都会形成关联。在如上图右侧系统里,我们可以配置用户 ID、OpenID、手机号、身份证这些点的属性、物理表及关联关系,形成 ID 图谱。那么结合 ID 图谱,就可以基于 Doris 进行 OneID 的构建。

2. 构建 OneID

ApacheDoris-众安保险-数据融合-构建 OneID.png

基于用户各个业务线之间点和边的关系,我们会将用户在不同业务线中的信息全部抽取出来,放入一张大表里面进行 Union All 操作。这张表包含了手机号、体系 A 用户 ID、体系 B 用户 ID、身份证号和 Open ID 关键信息。OneID 的构建流程如下:

  • 首先,利用 Doris 提供的 row number 窗口函数生成完整的全局行顺序。然后对所有 ID 关系数据进行 Union All 操作。
  • 接着,使用窗口函数 dense rank 和 row number 的复数生成为空/不为空时的首列 Rank 值。
  • 最后,通过循环迭代计算每一列最小距离,并不断迭代 Rank 值,直到当前列与上一迭代结果全局匹配。当所有数据连续匹配满 5 次后,就以最终 Rank 值为准进行用户分组,从而得用户唯一标识 OneID。

结合上图以及构建流程,可以得出结论: 1 - 4 行是用户 1,5 - 6 行是用户 2。

标签体系

我们的标签体系由实时标签和离线标签两部分组成,目前该体系拥有超过 2000 个标签,涉及 50 余张来源表,服务用户量已达亿级。

Apache Doris-众安保险-标签体系.png

在标签体系中,有一些简单的配置规则:

  • 离线标签:在 Doris 中抽象出三种业务类型表,分别是用户数据表、业务明细表和行为事件表。根据上方标签配置规则,通过 DSL 动态语义生成 SQL,然后在 Doris 中进行计算,并将计算结果存储在 Doris 中,形成一张离线标签宽表。
  • 实时标签:基于 Flink 接收 Kafka 、 CDC 消息,并根据实时标签配置元数据,在 Flink 中计算出实时标签,并将最终结果写入 Doris 的实时标签宽表中。

ApacheDoris - 众安保险-标签配置规则.png

Apache Doris 在标签体系中的应用主要包含以下四个方面:

1.离线标签处理: 由于拥有 2000+ 较大量级的标签一级用户,当遇到高峰期并发宽表写入时,全量更新所有列可能会出现内存不足的问题。为避免该问题,我们利用 Doris 的 Insert Into Select 功能,在 session 变量中打开部分列更新开关,只更新目标表中需要修改的列,这样可显著减少内存消耗,以提升全量导入的稳定性。

set enable_unique_key_partial_update=true;
insert into tb_label_result(one_id, labelxx) 
select one_id, label_value as labelxx
from .....

2.实时标签处理: 在实时标签写入时,不同的实时标签字段更新时间不一样,而部分列更新能力可以满足此更新需求。只需打开 Partial Column,并将其设置为 True,就可以实现实时标签的部分列更新。

curl --location-trusted -u root: -H "partial_columns:true" -H "column_separator:," -H "columns:id,balance,last_access_time" -T /tmp/test.csv http://127.0.0.1:48037/api/db1/user_profile/_stream_load

3.标签点查: 随着线上业务量的不断增长,我们面临着处理超过 5000 QPS 标签请求的挑战。为满足这一需求,我们采用多种策略来确保高效的点查性能。首先,通过利用 PrepareStatement 技术,预编译和执行 SQL 查询,从而提高查询效率。其次,精细调整了 Backend(BE)参数和表参数,以优化数据存储和查询性能。同时,我们打开了行存,进一步提升系统在高并发场景下的处理能力。

  • 在 be.conf 中调整 BE 参数:
disable_storage_row_cache = false                      
storage_page_cache_limit=40%
  • 在建表时调整表属性:
enable_unique_key_merge_on_write = true
store_row_column = true
light_schema_change = true

4.标签计算:为了满足用户对于标签配置的灵活需求,系统允许在 DSL 生成的语义中进行多表 Join 操作,而这就可能会涉及十几张表的 Join 操作。为了确保标签计算性能最优,我们充分运用 Doris Colocation Group 策略,对所有分桶列的类型、数量和副本进行统一,并优先满足 Colocation Join 和本地的 Hash Join。在线上环境中,也可以打开Colocate With开关,指定一个 Group,确保全局表的分片与副本策略一致。

客群圈选

Apache Doris-众安保险-客群圈选.png

在架构 1.0 中,客群服务先生成动态 SQL,然后将其传输到 Impala 中进行客群圈选。完成圈选后,结果集需被重新读取回客群服务,并由其上传到对象存储中。这一连串的操作使得数据处理链路相对冗长,影响了整体效率。而在架构 2.0 中,我们可以在 Doris 中使用基于 Select 语句的结果集,并通过 Select Into Outfile 功能,将数据无缝导入到 S3 协议的对象存储中,这种方式极大缩短了数据处理链路。

在实际的业务中,线上约有 100 万个客群,单个客群生成所需时间从 50 秒缩短至 10 秒,极大提升了客群圈选效率。 若需要进一步提高性能,可以选择打开并发导出开关,进一步提高数据导出性能。

客群归属

Apache Doris-众安保险-客群归属.png

在我们的业务系统中,客群归属扮演着至关重要的角色,特别是在实时智能营销和千人千面的识别场景中。我们经常需要判断某个用户是否隶属于特定的客群,或者确定其属于哪些客群。这种全局性的判断有助于我们深入理解多个客群之间的用户重叠关系。

为了满足这一需求,我们可以借助 Bitmap 来实现。在 Bitmap 中,使用 Bitmap Contains 可以快速识别某个用户是否存在于特定客群中,也可以通过 Bitmap OR、Bitmap Intersect 或 Bitmap XOR 来实现客群全量、多版本之间的交并叉分析,从而提供更为精准和高效的营销策略。

总结与展望

在架构 1.0 中采用了复杂的技术组合,以实现标签、客群以及 OneID 的计算。这一架构组件众多,导致数据处理链路冗长、造成数据孤岛,且有着较高的管理和维护成本。通过引入 Apache Doris ,替换了 Spark + Impala + Hbase + Nebula,成功实现存储与计算的统一,简化了数据处理的流程,不仅降低了系统的复杂性,更提升了数据处理的效率,满足了更丰富的数据处理需求。
随着业务的发展,实时营销场景对实时性的要求日益提升。未来,我们计划在 3.0 版本中,实现离线标签和实时标签的混合圈选功能,并依托 Doris 进行 OneID 实时计算。这将使我们能够更快速、准确地识别增量的用户,并在多用户体系中实现精准的用户识别,以满足不断变化的业务需求,推动实时智能营销和个性化识别场景的持续创新与发展。
最后,我们衷心感谢 SelectDB 技术团队 所提供的技术支持,未来我们期待与社区更紧密的合作,为社区贡献力所能及的力量,共同推动技术的发展与进步。

Doris实战——拈花云科的数据中台实践 阅读详情

相关推荐

别再只盯着ADC了!手把手教你拆解HLW8032模块的隔离与非隔离采样电路(附BOM清单)

本文深入解析HLW8032模块的隔离与非隔离采样电路设计,提供工程化决策指南。从安全间距到PCB布局,再到误差分析和BOM清单优化,手把手教你避开常见陷阱,确保产品级设计的可靠性和精度。附实用校准策略和关键元器件选型建议,助力硬件开发者提升设计水平。

weixin_29206669的博客 401

用StarRocks玩转用户画像-5-DMP精准营销

客群圈选 - 属性明细表模型 客群属性明细表,建模时,比较常用的有2种模型: 宽表模型 主要适用于前导流程为离线ETL,模型相对固定 可以基于宽表模型构建物化视图,加速圈选查询效率 另外宽表模型,对于基于UID查用户明细,应对高并发场景也比较友好 宽表模型示意如下: 纵表模型(高表) 适用于前导为实时ETL,模型变动较快,如当日有新增属性标签, 纵表模型避免了做schema change相对灵活 缺点:难以命中物化视图,建表时也需要考虑数据倾斜相关难点 纵表模型示意如下: b

u013836748的博客 2239

基于STM32的家用新风系统智能控制器 | 保姆式教程 开源可复刻

本项目基于STM32F103C8T6核心控制器,完整实现了家用新风系统智能控制器的全功能开发,覆盖多传感器数据采集、双模式控制、PID调速、异常报警、掉电记忆等核心功能,全程采用保姆式无跳步教学,从硬件选型、接线、CubeMX配置、代码开发、调试排坑全流程拆解,跟着步骤一步步操作,就能顺利完成项目复刻

ZhongWeiXiang9的博客 463

如何精准圈选,高效触达目标人群?

以嗨数云分析平台为例,通过埋点采集用户行为轨迹,包括点击、浏览、购买等,并结合用户的基本信息、标签和分群,生成全景用户画像。另外,嗨数云平台支持基于用户行为路径的深度下钻分析,帮助企业发现用户行为背后的潜在需求,并通过标签体系和分群功能,快速筛选出高价值用户群体。数字时代,面对海量的用户信息,如何精准定位目标人群,找准营销方向,发挥营销价值,成为企业普遍面临的挑战。通过用户的基本信息和行为数据,能够快速定位关键人群,可以帮助企业快速找到符合特定条件的用户群体,为后续的营销活动提供科学的数据支撑。

Hnzy6881的博客 1554

从MySQL到数据仓库:手把手教你用Airflow实现自动化ETL流水线

本文详细介绍了如何利用Airflow构建从MySQL到数据仓库的自动化ETL流水线,涵盖增量抽取策略、PySpark转换优化和数据质量监控等实战细节。特别适合中小规模企业构建高效数据仓库,提升数据处理效率和质量。

rnn9storyteller的博客 827

S/4中的16种特殊库存类型

S/4中的16种特殊库存类型

yanzibing99的博客 1万+

Doris: Multi Catalog 多源数据目录

Doris: Multi Catalog 多源数据目录

weixin_42326851的博客 7218

EMC辐射发射测试:垂直与水平极化测试原理与实战指南

电磁兼容(EMC)测试是确保电子设备在复杂电磁环境中稳定运行的关键环节,其核心在于评估设备产生的电磁干扰(EMI)强度。辐射发射测试作为EMC测试的重要组成部分,通过测量设备向空间辐射的电磁噪声,判断其是否符合国际标准限值。测试原理基于电磁波的极化特性,即电场矢量的振动方向,主要分为垂直极化和水平极化。理解极化特性对于精准定位辐射源、高效进行EMC整改具有重要技术价值。在工程实践中,垂直极化噪声通常源于线缆辐射等垂直结构,而水平极化噪声多来自PCB走线等水平结构。通过分别测量两种极化方向的辐射最大值,可以全

weixin_32770423的博客 350

CDP客户数据平台原型

客户数据平台 (CDP) ,旨在帮助企业收集、统一、管理和分析来自多个来源的第一方客户数据。CDP 可以帮助企业构建统一的客户视图,并利用这些数据进行客户洞察分析、客户分群管理、个性化精准营销、优化客户旅程优化。支持多种数据源接入,涵盖线上线下全渠道数据(数据库、API、离线),打通数据孤岛。提供客户画像、群体分析,精准识别客户需求,预测未来行为,提供个性化服务和产品推荐。提供统一的客户画像,360° 全方位洞察客户信息,为后续客户数据洞察提供条件。洞悉客户旅程,优化营销策略,提升客户满意度和忠诚度。

qq_27749149的博客 630

YOLOv11改进 | 主干/Backbone篇 | 利用RT-DETR主干网络PPHGNetV2助力yolov11有效涨点(轻量化目标检测网络)

本文给大家带来利用RT-DETR模型主干HGNet去替换YOLOv11的主干,RT-DETR是今年由百度推出的第一款实时的ViT模型,其在实时检测的领域上号称是打败了YOLO系列,其利用两个主干一个是HGNet一个是ResNet,其中HGNet就是我们今天来讲解的网络结构模型,这个网络结构目前还没有推出论文,所以其理论知识在网络上也是非常的少,我也是根据网络结构图进行了分析(精度mAP提高0.05)。YOLOv11改进系列专栏——本专栏持续复习各种顶会内容——科研必备​目录一、本文介绍。

Snu77的博客 3719

智能手表 BOM 表与版本管理记录

试产与量产阶段 智能手表 BOM 表与版本管理记录

hoony123的博客 1053

CDP 平台简介

企业数据云概述 企业对大数据解决方案的要求:只要有必要,就可以在一个地方以原始的保真度来获取和合并任何数量或类型的数据,并尽可能快地向所有用户提供洞察力。 企业数据云公司 Cloudera 引入了企业数据云(EDC)的概念:数据驱动的企业需要能够对无处不在的数据应用多种分析规则;能够以流式的方式传输和处理来自边缘多个端点的实时数据,同时预测关键结果并在同一数据集上应用机器学习技术;能够充分利用公有云基础架构的敏捷性、灵活性以及日益庞大的数据引力;此外,能够在开放平台上完成所有这些工作,在数据存放和分析运

数据库技术 1176

【异常】SpringCloud Gateway报错503 SERVICE_UNAVAILABLE “Unable to find instance for xxx-gen“

网关服务报错,如下。

奶爸的编程之路,也就一周冷个三天 4223

CDP 技术系列(二):ClickHouse+Bitmap 实现海量数据标签及群体组合计算

针对以上问题,我们使用了ClickHouse(以下简称CK),一个由俄罗斯Yandex在2016年年开源的⾼性能分析型SQL数据库,是一个用于联机分析处理(OLAP)的列式数据库管理系统(columnar DBMS)。它具有以下特点:1、完备的数据库管理功能,包括DML(数据操作语言)、DDL(数据定义语言)、权限控制、数据备份与恢复、分布式计算和管理。2、数据按列存储,在按列聚合的场景下,可有效减少查询时所需扫描的数据量。

京东科技开发者 1898

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

Doris bitmap人群圈选案例

【代码】Doris bitmap人群圈选案例。

wangleigiser的博客 966

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

上篇 | CDP应用篇之兴趣标签的3种破圈玩法

谈到客户洞察,在这个以客户为中心、以数据为驱动的客户经营时代,贯通数据,联动CDP客户数据平台、SCRM、会员、营销一站式的客户洞察解决方案,成为了头部房企们的万千宠爱。其中关于人群兴趣标签的破圈玩法,我们结合过往服务的客户案例梳理了3种玩法,供大家参考。本文将对第一种玩法进行说明,另外两种玩法,即借助行业洞察来破圈、借助流失曲线/转化分析破圈,将在下篇中进行介绍。

WAKEDATA的博客 557

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

客户数据平台——CDP的作用与核心价值

CDP通过整合客户数据、利用身份图谱技术,以及将电子邮件等关键数据作为桥梁,帮助企业在无第三方Cookie的环境下继续精准识别用户、优化营销策略。

m0_52367421的博客 1185

Doris入门篇-Apache Doris 1.2.0 JDBC外表 及 Mutil Catalog

Doris入门篇-Apache Doris 1.2.0 JDBC外表 及 Mutil Catalog

S1124654的博客 2806

ClickHouse:人群圈选业务的大杀器

简介:随着数据时代的发展,各行各业数据平台的体量越来越大,用户个性化运营的诉求也越来越突出,用户标签系统,做为个性化千人千面运营的基础服务,应运而生。如今,几乎所有行业(如互联网、游戏、教育等)都有实时精准营销的需求。针对复杂条件过滤的场景,ClickHouse对多条件筛选流程做出优化,扫描的数据量更小,性能也较ES而言更高效。什么是人群圈选随着数据时代的发展,各行各业数据平台的体量越来越大,用户个性化运营的诉求也越来越突出,用户标签系统,做为个性化千人千面运营的基础服务,应运而生。如今,几乎所有行业(如互

阿里云开发者 2643

[1.2.0新功能系列:二] Apache Doris 1.2.0 JDBC外表 及 Mutil Catalog

这里以 JDBC Mutil Catalog方式演示了Mutil Catalog方式的使用,其他Hive、Hudi、Iceberg及ES使用方法一样,具体可以参照官方文档:https://doris.apache.org/zh-CN/docs/dev/ecosystem/external-table/multi-catalog。多源数据目录(Multi-Catalog)是 Doris 1.2.0 版本中推出的功能,旨在能够更方便对接外部数据目录,以增强Doris的数据湖分析和联邦数据查询能力。

锋哥聊DORIS数仓 3474

客户数据平台(CDP)是什么?

Customer Data Platform (CDP)。 所有人都想从最基本的开始做起,了解客户是谁。这似乎很简单, 但客户与业务互动渠道的激增使得这个简单的目标变得极其复杂。 每个业务部门依赖的是客户数据的不同方面,他们都有自己的运用场景。 销售部门依赖于CRM、售后部门主要看客服系统、市场营销部门关心微信平台、数据分析团队使用各类数据分析工具。 这些工具各自产生新的、孤立的、片面的客户数据, 却无法快速同步, 甚至团队之间还怀疑对方数据是否正确。 ...

果汁华的博客 9226

CDP-客户数据平台

CDP-客户数据平台学习资料

chimchim66的博客 3011

3分钟告诉你什么是CDP系统

实体零售行业正在悄然变革,零售企业数字化转型进程不得不加快,市场环境不断发生转变,数字化升级是零售企业的必经之路。而数字化之路也在这期间产生了很多变化,其中就包括了CDP。 在进入中国市场的这几年,CDP已经得到了充分的发展,越来越多的企业已经选择了CDP来助其数字化转型,也有越来越多的企业不再观望,开始参与CDP的数字化之行。 虽说CDP已经进入春天,但依然有很多企业并不了解什么是CDP,那么今天就聊聊这个话题,帮助大家讲透吃透。 其实早在2013年,CDP就在国外被提出了,英文全称是:Custom

博阳SCRM的博客 2745

阿里的CDP,ODBS集成与实践

阿里cdp介绍 阿里的cdp我们理解为是一个ETL工具。 Pipeline是资源隔离的单元,Pipeline之间的管道资源以及底层的引擎等资源都是相互隔离的,一个Project的运行任务不会影响其他的Pipeline任务运行 同时提供一套抽象化的数据抽取插件(称之为Reader)、数据写入插件(称之为Writer), cdp技术与原理 用户使用CDP Job启动API,向CDP服务端发起调用,提交

xhpscdx的专栏 4203

构建消费者数据平台(CDP),实现全域消费者数字化运营闭环

数字化时代,众多品牌商和零售商都意识到“以消费者为中心”和“数据驱动”是企业增长的两大核心武器,开始从过去粗放的消费者运营转向基于大数据的全渠道精细化运营。 近日,神策数据正式推出品牌零售行业解决方案,并上线官网全面公开,助力更多品牌零售企业构建消费者数据平台(CDP),实现全域消费者数字化运营闭环。 一、探究行业现状,洞悉品牌零售企业核心诉求 纵观行业态势,数字化运营是品牌零售行业数字化转型的重要主题,全域运营成为其数字化运营的战略共识,在此背景下,品牌零售行业格外关注公域与私域联动、系统与运...

神策数据 3491
上一篇: Apache Doris 2.0.5 版本正式发布
下一篇: Apache Doris 2.1.0 版本发布:开箱盲测性能大幅优化,复杂查询性能提升 100%
SelectDB技术团队
博客等级 码龄4年 2119粉丝 483原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SelectDB技术团队

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值