精华内容
下载资源
问答
  • 大家好,我是小编v兔。...消费者参与程度的高低主要与产品的价格,产品的功能用途以及消费者自身等因素有关。 价格不用讲了,价格越高,消费者的参与程度就越高,消费心购买的时候肯定会更小心。 还有商品的功能

    大家好,我是小编v兔。消费者的购买行为可以分为:1.复杂购买行为类型;2.寻求变化的购买行为类型;3.寻求平衡的购买行为类型;4.习惯性购买行为类型四种类型。

    其中复杂购买行为类型和寻求平衡的购买行为类型的消费者参与程度比较高,而寻求变化的购买行为类型和习惯性购买行为类型中消费者的参与度则比较低。

    可能一些小伙伴不理解参与程度的高低。

    消费者参与程度的高低主要与产品的价格,产品的功能用途以及消费者自身等因素有关。

    价格不用讲了,价格越高,消费者的参与程度就越高,消费心购买的时候肯定会更小心。

    还有商品的功能用途,既商品的因素,商品本身的使用范围越广,功能越多,或者构造越复杂,消费者在购买的时候就要做更多的了解,这样消费者的参与程度就会高了。如果只是单一的用途,消费者也比较了解他,那么参与程度就会很低。

    还有一点就是消费者自身的原因,当消费对这个商品越重视,那么购买过程中的参与程度就会很高。这也就是匹配商品与消费者的重要原因。

    当然最主要的还是了解消费者的需求和欲望,知道消费者想要什么,针对消费者的需求,制定出符合大多数人想要的商品。

    展开全文
  • 关于“CAE工程师是需要掌握力学知识到何种程度话题,似乎已经被讨论了无数遍,每次提出这个话题都会吸引上百个人参与讨论,众说纷纭,场面好不热闹。有人说“力学知识很重要,其掌握深浅决定了你CAE高低”;...

    f2f2b0667a7d6dd4c42c10386a686425.png

    关于“CAE工程师是需要掌握力学知识到何种程度”的话题,似乎已经被讨论了无数遍,每次提出这个话题都会吸引上百个人参与讨论,众说纷纭,场面好不热闹。

    4cd97f68bea45993a072b1ee0b2a25a3.png

    有人说“力学知识很重要,其掌握的深浅决定了你的CAE高低”;有人说“CAE工程师应当侧重于工作经验,力学知识只需掌握基础便足矣”;也有其他不同看法“CAE工程师掌握力学知识的程度对于不同的行业是不同的”。每个人观点不尽相同,下面便对部分精华观点进行编辑整理:

    A君的观点

    A君认为力学知识的掌握程度决定了CAE的高度,欲想成为资深的CAE工程师必须在拥有丰富的工程经验外,对力学知识掌握透彻。一名优秀的CAE工程师,或者说一名合格的CAE工程人员,力学知识的掌握程度绝对决定你在业内的高度。”

    7eacdfa693a912f42de0329d6ed75519.png

    B君的观点

    无独有偶,B君对此亦是持赞同意见,他认为:“从CAE扮演的行业分工来看,其精确定位就是一个工具,力学问题才是重点,CAE方法服务于基于力学知识的结构受力判断。而CAE最理性的的发展趋势当然是操作越便捷,人为干预越少越好,最好点个键就出结果!什么力学、弹性、塑性都不要有,最好网格也不需要,CAD模型出来了,就有结果多好!


    但是,这种期望估计未来几十年都不可能实现,数学建模、材料选择、连接触、结果分析,每一步都可能涉及到力学知识;模型规模需要控制,求解时间需要压缩,精度要有保证,结果要经得起实验校核,这些也要用到力学相关知识。借助力学知识我们可以抽繁就简,可以让不可能变成可能,同时重点还能得到突出。

    99afe8c99e1e5f67a9c67fa7c0f00434.png

    即使到了未来,CAE分析直接用CAD了,走大众路线了,全部都后台了。那么后台呢,还是要用到力学,必然有这么一群人还在啃着材料力学、理论力学、连续介质力学、张量分析,可能是小众,但是也许只有这波人的才能叫CAER了!

    A君和B君的观点很是明晰,认为CAE从业人员在工作中,需要了解掌握各种力学知识,比如材料力学、理论力学、连续介质力学、张量分析等,只有了解掌握了这些力学知识,才有可能成为一名合格的CAE工程师。

    C君的观点

    而相对于A君和B君的观点来说,C君提出不同见解,在他看来:“CAE软件的工程经验也很重要,例如对于结构静力学的单元选择,模型的简化和网格划分这些对于后续的结果输出的准确性都至关重要,当然选择合适的CAE软件也很重要,我们工作中常用SW,实体零件可以导入WB直接分析,但对于桁架结构,梁单元模型就比较难,必须在ANSYS或者ABAQUS中重新建模,当然ANSYS新推出的SCDM里抽梁功能能弥补这一环节,但是具体操作仍问题不少。”

    08c634de94193b37f42191858475a9ad.gif

    D君的观点

    与此同时,D君提出相仿观念,他的主张为:“相对于力学知识,我个人认为工程经验更重要。当然在学习前期必须具备一定的力学基础,不然基本没法深入学习,但是CAE主要用于工程辅助的,就不能脱离实际!很多东西都是在书上不能学到的,就好比模型的简化,边界条件的简化这些都需要工程实际经验,力学学的再好,软件学的再好,但是不能把理论与实际结合就没有用,更不能体现个人价值。”


    在C君和D君看来,了解一定的力学知识对于CAE工程师固然是锦上添花,掌握相当的力学基础自然是一件好事,但是CAE不能脱离实际,拥有丰富的工作经验,将理论与实际结合起来,才能体现个人价值。

    7dd16d8b45aafef7675aa1f098634d83.png

    E君的观点

    而不同于以上几位观点持有者的想法,这里还存在着另一种见地,E君对于力学知识的关注角度不一致:“首先,肯定的答案对于CAE从业人员而言力学知识是大有裨益,多多益善的!良好的力学知识对于很好的学习CAE软件操作、精确设置模拟参数、分析模拟结果等相关的CAE工作能起到事半功倍的效果。

    但是掌握力学知识到何种程度,要取决于所从事行业的定位、个人能力等多方面内容! 举例说明如下: 对于机械设计人员,他们的工作往往仅仅是利用CAE软件对成熟产品进行强度校核,疲劳分析等,那么他们就只需要有大学工程力学的知识,能够熟练正确操作CAE软件就足够了!

    021bc191a3c2a8509a85dd858442796e.png

    对于做理论模拟研究的人员,如博硕士、研究员,特别是需要二次开发软件实现研究目的的,就要掌握较好较全面的有理论深度的力学知识,弄清楚力学原理与CAE模拟的数学关系。 对于做大中型装备虚拟样机模拟的人员,就要非常全面的掌握力学知识,不仅在广度上,也要在深度上。而且也要有丰富的工程经验,能将力学理论与CAE模拟有机结合!”

    1e4b3a8706e0fdf09dd15f4f5cf20a87.png

    在众多人的观点中,我们可以知道,由于行业间的差异,工作内容的不同,力学知识的掌握程度,对于CAE工程师的要求也不同,所谓“术业有专攻”大概便是其中缘由。

    于此,CAE工程师需要掌握力学知识到何种程度,每个人依旧持有各自不同的看法,正所谓“横看成岭侧成峰, 远近高低各不同。”对于科学技术越来越先进的今天,此议题能引起诸多CAE爱好者的注意,能加深诸位对CAE的理解,希望对您有所帮助。

    本文来源:许佰宁

    bf0f1c9f084760255fb4f249c674cff0.png
    展开全文
  • GLUE 是一个用于评估通用 NLP 模型的基准,其排行榜可以在一定程度上反映 NLP 模型性能的高低。然而,现有的 GLUE 基准针对的是英文任务,无法评价 NLP 模型处理中文的能力。为了填补这一空白,国内关注 NLP 的热心...

    机器之心整理

    参与:张倩、郑丽慧

    GLUE 是一个用于评估通用 NLP 模型的基准,其排行榜可以在一定程度上反映 NLP 模型性能的高低。然而,现有的 GLUE 基准针对的是英文任务,无法评价 NLP 模型处理中文的能力。为了填补这一空白,国内关注 NLP 的热心人士发布了一个中文语言理解测评基准——ChineseGLUE。ChineseGLUE 目前拥有八个数据集的整体测评及其基线模型,目前已经有 20多位来自各个顶尖机构的自愿者加入并成为了创始会员。

    ChineseGLUE 的成员包括全国各地关注 NLP 的热心专业人士,包括清华、北大、浙大等知名高校的毕业生。团队的愿景是通过完善中文语言理解基础设施,促进中文语言模型的发展,能够作为通用语言模型测评的补充,以更好地服务中文语言理解、任务和产业界。

    项目地址:https://github.com/chineseGLUE/chineseGLUE

    GLUE 是什么?有什么用?

    为了使自然语言理解技术(NLU)发挥最大作用,NLU 模型必须能够处理多种任务或数据集。为此,来自纽约大学、华盛顿大学、DeepMind 等机构的研究者创建了一个多任务自然语言理解基准和分析平台——GLUE(General Language Understanding Evaluation),用于评估 NLP 模型在现有的多个自然语言理解任务中的性能。

    ChineseGLUE:为中文NLP模型定制的自然语言理解基准

     

    GLUE 是九种(英语)语言理解任务的集合,包括文本蕴涵、情感分析和语法判断等。其设计目的是覆盖足够大的 NLP 领域。只有开发出足够通用的工具,才能在这一基准上表现良好。GLUE 的最终目标是推动通用的、鲁棒的自然语言理解系统的研究。

    今年 4 月份,由于 BERT 等模型的出现,GLUE 基准在新模型的评估方面日渐乏力,研究者决定将其升级为 SuperGLUE。SuperGLUE 保留了两项 GLUE 任务,另外又加入了其它五项新任务,提高了这一测试基准的难度。

    ChineseGLUE:为中文NLP模型定制的自然语言理解基准

     

    虽然这一基准测试已经升级,但不变的一点是,它只支持英文任务。因此,我们亟需一个中文版的 GLUE 基准。

    为什么需要 ChineseGLUE?

    对于 ChineseGLUE 的创建初衷,项目作者给出了三点理由:

    1. 中文是一个大语种,有其自身特定及大量的应用。产业界的 NLP 模型需要解决大量中文任务,而中文是象形文字,有文字图形;字与字之间没有分隔符,不同的分词 (分字或词) 会影响下游任务。
    2. 相对于英文数据集来说,中文数据集大多是非公开或者缺失基准测评的,大多数论文所描述的模型都是在英文数据集上做的测试和评估,在中文领域的效果却不得而知。
    3. 预训练模型的相继产生极大地促进了对自然语言的理解,但不少最先进的模型却没有中文版本,导致技术应用上的滞后。

    所以,如果有一个中文任务的基准测试,包含一批大众能广泛使用和测评的数据集、适用中文任务的特点、能紧跟当前世界技术的发展,就能够更好地缓解当前中文任务的一些问题,并促进相关应用的发展。

    ChineseGLUE 都有什么?

    ChineseGLUE 是一个中文语言理解测评基准,思路源于 GLUE,包括:

    1)中文任务的基准测试,覆盖多个不同程度的语言任务

    一个包含若干句子或句子对语言理解任务的基准。当前,这些任务中使用的数据集是公开的,2019 年底前将收录具备私有测试集的数据集。

    2)公开的排行榜

    一个用于性能跟踪的公开排行榜。你可以提交跟这些任务相关的预测文件,每个任务都会被评估打分,最后会有一个总分。

    排行榜会定期更新,并迅速扩大可公开使用和测评的数据集数量(cmrc2018 仅开发集结果)

    ChineseGLUE:为中文NLP模型定制的自然语言理解基准

     

    TNEWS:文本分类;LCQMC:语义相似度;XNLI:自然语言推理;INEWS:情感分析;DRCD & CMRC2018:阅读理解;cmrc2018 仅开发集结果。

    3)基线模型,包含开始的代码、预训练模型

    ChineseGLUE 任务的基线。基线应该是在 TensorFlow,PyTorch,Keras 和 PaddlePaddle 中可使用的。

    4)语料库,用于语言建模、预训练或生成型任务

    用于预训练或语言建模研究的巨型原始语料库,大约 10G(2019 年)。

    2020 年上半年,至少具备 30G 的原始语料库;到 2020 年底将包含充足的原始语料库(例如 100G),它足够大,以至于你不再需要那种用于通用语言建模的原始语料库。

    你可以将其用于常规用途或特定领域,甚至用于文本生成。当用于特定领域时,你可以选择自己感兴趣的语料库。

    数据集

    ChineseGLUE 的目标是包含 8 个覆盖不同任务的有代表性的数据集,包括:

    1. LCQMC 口语化描述的语义相似度任务

    输入是两个句子,输出是 0 或 1。其中 0 代表语义不相似,1 代表语义相似。

    数据量:训练集 (238,766),验证集 (8,802),测试集 (12,500)
     例子: 
     1. 聊天室都有哪些好的 [分隔符] 聊天室哪个好 [分隔符] 1
     2. 飞行员没钱买房怎么办?[分隔符] 父母没钱买房子 [分隔符] 0
    

    2. XNLI 语言推断任务

    跨语言理解的数据集,给定一个前提和假设,判断这个假设与前提是否具有蕴涵、对立、中性关系。

    数据量:训练集 (392,703),验证集 (?),测试集 (?)
     例子: 
     1. 从 概念 上 看 , 奶油 收入 有 两 个 基本 方面 产品 和 地理 .[分隔符] 产品 和 地理 是 什么 使 奶油 抹 霜 工作 . [分隔符] neutral
     2. 我们 的 一个 号码 会 非常 详细 地 执行 你 的 指示 [分隔符] 我 团队 的 一个 成员 将 非常 精确 地 执行 你 的 命令 [分隔符] entailment
     原始的 XNLI 覆盖 15 种语言(含低资源语言)。我们选取其中的中文,并将做格式转换,使得非常容易进入训练和测试阶段。
    

    3.TNEWS 今日头条中文新闻(短文本)分类

    数据量:训练集 (266,000),验证集 (57,000),测试集 (57,000)
     例子:
     6552431613437805063_!_102_!_news_entertainment_!_谢娜为李浩菲澄清网络谣言,之后她的两个行为给自己加分_!_佟丽娅, 网络谣言, 快乐大本营, 李浩菲, 谢娜, 观众们
     每行为一条数据,以_!_分割的个字段,从前往后分别是 新闻 ID,分类 code,分类名称,新闻字符串(仅含标题),新闻关键词
    

    4.INEWS 互联网情感分析任务

    数据量:训练集 (5,356),验证集 (1,000),测试集 (1,000) 
     例子:
     1_!_00005a3efe934a19adc0b69b05faeae7_!_九江办好人民满意教育_!_近 3 年来,九江市紧紧围绕「人本教育、公平教育、优质教育、幸福教育」的目标,努力办好人民满意教育,促进了义务教育均衡发展,农村贫困地区办学条件改善。目前,该市特色教育学校有 70 所 ......
     每行为一条数据,以_!_分割的个字段,从前往后分别是情感类别,数据 id,新闻标题,新闻内容
    

    5.DRCD 繁体阅读理解任务

    台达阅读理解资料集 Delta Reading Comprehension Dataset (DRCD)属于通用领域繁体中文机器阅读理解资料集,本资料集期望成为适用于迁移学习之标准中文阅读理解资料集。

    数据量:训练集 (8,016 个段落,26,936 个问题),验证集 (1,000 个段落,3,524 个问题),测试集 (1,000 个段落,3,493 个问题) 
    例子:
    
    {
     "version": "1.3",
     "data": [
     {
     "title": "基督新教",
     "id": "2128",
     "paragraphs": [
     {
     "context": "基督新教與天主教均繼承普世教會歷史上許多傳統教義,如三位一體、聖經作為上帝的啟示、原罪、認罪、最後審判等等,但有別於天主教和東正教,新教在行政上沒有單一組織架構或領導,而且在教義上強調因信稱義、信徒皆祭司,以聖經作為最高權威,亦因此否定以教宗為首的聖統制、拒絕天主教教條中關於聖傳與聖經具同等地位的教導。新教各宗派間教義不盡相同,但一致認同五個唯獨:唯獨恩典:人的靈魂得拯救唯獨是神的恩典,是上帝送給人的禮物。唯獨信心:人唯獨藉信心接受神的赦罪、拯救。唯獨基督:作為人類的代罪羔羊,耶穌基督是人與上帝之間唯一的調解者。唯獨聖經:唯有聖經是信仰的終極權威。唯獨上帝的榮耀:唯獨上帝配得讚美、榮耀",
     "id": "2128-2",
     "qas": [
     {
     "id": "2128-2-1",
     "question": "新教在教義上強調信徒皆祭司以及什麼樣的理念?",
     "answers": [
     {
     "id": "1",
     "text": "因信稱義",
     "answer_start": 92
     }
     ]
     },
     {
     "id": "2128-2-2",
     "question": "哪本經典為新教的最高權威?",
     "answers": [
     {
     "id": "1",
     "text": "聖經",
     "answer_start": 105
     }
     ]
     }
     ]
     }
     ]
     }
     ]
    }
    

    数据格式和 squad 相同,如果使用简体中文模型进行评测的时候可以将其繁转简 (本项目已提供)

    6.CMRC2018 简体中文阅读理解任务

    https://hfl-rc.github.io/cmrc2018/

    数据量:训练集 (短文数 2,403,问题数 10,142),试验集 (短文数 256,问题数 1,002),开发集 (短文数 848,问题数 3,219) 
    例子:
    
    {
     "version": "1.0",
     "data": [
     {
     "title": "傻钱策略",
     "context_id": "TRIAL_0",
     "context_text": "工商协进会报告,12 月消费者信心上升到 78.1,明显高于 11 月的 72。另据《华尔街日报》报道,2013 年是 1995 年以来美国股市表现最好的一年。这一年里,投资美国股市的明智做法是追着「傻钱」跑。所谓的「傻钱」策略,其实就是买入并持有美国股票这样的普通组合。这个策略要比对冲基金和其它专业投资者使用的更为复杂的投资方法效果好得多。",
     "qas":[
     {
     "query_id": "TRIAL_0_QUERY_0",
     "query_text": "什么是傻钱策略?",
     "answers": [
     "所谓的「傻钱」策略,其实就是买入并持有美国股票这样的普通组合",
     "其实就是买入并持有美国股票这样的普通组合",
     "买入并持有美国股票这样的普通组合"
     ]
     },
     {
     "query_id": "TRIAL_0_QUERY_1",
     "query_text": "12 月的消费者信心指数是多少?",
     "answers": [
     "78.1",
     "78.1",
     "78.1"
     ]
     },
     {
     "query_id": "TRIAL_0_QUERY_2",
     "query_text": "消费者信心指数由什么机构发布?",
     "answers": [
     "工商协进会",
     "工商协进会",
     "工商协进会"
     ]
     }
     ]
     }
     ]
    }
    

    数据格式和 squad 相同

    7. CCKS2018 Task3 智能客服问句匹配

    该数据集是自动问答系统语料,共有 100,000 对句子对,并标注了句子对相似度值,取值为 0 或 1(0 表示不相似,1 表示相似),并按 70:20:10 比例分割成训练集、开发集和测试集。数据中存在错别字、语法不规范等问题,但更加贴近工业场景。

    数据量:训练集 (70,000),验证集 (20,000),测试集 (10,000)
     例子: 
     1. 我存钱还不扣的 [分隔符] 借了每天都要还利息吗 [分隔符] 0
     2. 为什么我的还没有额度 [分隔符] 为啥没有额度!![分隔符] 1
    

    8. MSRANER 命名实体识别

    该数据集共有 5 万多条中文命名实体识别标注数据(包括人名、地名、组织名),分别用 nr、ns、nt 表示,其他实体用 o 表示。

    数据量:训练集(46,364),测试集(4,365)
     例子: 
     1.据说/o 应/o 老友/o 之/o 邀/o ,/o 梁实秋/nr 还/o 坐/o 着/o 滑竿/o 来/o 此/o 品/o 过/o 玉峰/ns 茶/o 。/o
     2.他/o 每年/o 还/o 为/o 河北农业大学/nt 扶助/o 多/o 名/o 贫困/o 学生/o 。/o
    

    9. 还在添加中

    读者如果有定义良好的数据集,可以和创建团队联系。

    数据集下载地址:https://storage.googleapis.com/chineseglue/chineseGLUEdatasets.v0.0.1.zip

    或使用命令:

    wget https://storage.googleapis.com/chineseglue/chineseGLUEdatasets.v0.0.1.zip
    

    排行榜及各任务对比

    TNEWS 短文本分类:

    ChineseGLUE:为中文NLP模型定制的自然语言理解基准

     

    XNLI 自然语言推理:

    ChineseGLUE:为中文NLP模型定制的自然语言理解基准

     

    注:ALBERT-xlarge,在 XNLI 任务上训练暂时还存在有问题。

    LCQMC 口语化描述的语义相似度匹配:

    ChineseGLUE:为中文NLP模型定制的自然语言理解基准

     

    INEWS 互联网情感分析:

    ChineseGLUE:为中文NLP模型定制的自然语言理解基准

     

    DRCD 繁体阅读理解:

    ChineseGLUE:为中文NLP模型定制的自然语言理解基准

     

    CMRC2018 阅读理解 (暂时只有开发集结果):

    ChineseGLUE:为中文NLP模型定制的自然语言理解基准

     

    CCKS2018 Task3 智能客服问句匹配:

    ChineseGLUE:为中文NLP模型定制的自然语言理解基准

     

    基线模型代码

    1、数据集整体下载,解压到 glue 文件夹里

    cd gluewget https://storage.googleapis.com/chineseglue/chineseGLUEdatasets.v0.0.1.zip

    lcqmc 数据集,请从以下链接申请或搜索网络 :http://icrc.hitsz.edu.cn/info/1037/1146.htm

    2、训练模型

    a. 将预训练模型下载解压到对应的模型中 prev_trained_model 文件夹里。以 bert 和 albert 为例子:

     ``` a1. albert ``` 
     ```https://github.com/brightmart/albert_zh ``` 
     ```a1. bert ``` 
     ```https://github.com/google-research/bert ``` 
    

    b. 修改 run_classifier.sh 指定模型路径

    c. 运行各个模型文件夹下的 run_classifier.sh 即可sh run_classifier.sh

    3、详见:基准模型-模型训练

    https://github.com/chineseGLUE/chineseGLUE/tree/master/baselines

    语料库:语言建模、预训练或生成型任务

    可用于语言建模、预训练或生成型任务等,数据量超过 10G,主要部分来自于 nlp_chinese_corpus 项目。

    当前语料库按照【预训练格式】处理,内含有多个文件夹;每个文件夹有许多不超过 4M 大小的小文件,文件格式符合预训练格式:每句话一行,文档间空行隔开。

    包含如下子语料库(总共 14G 语料):

    1. 新闻语料: 8G 语料,分成两个上下两部分,总共有 2000 个小文件。
    2. 社区互动语料:3G 语料,包含 3G 文本,总共有 900 多个小文件。
    3. 维基百科:1.1G 左右文本,包含 300 左右小文件。
    4. 评论数据:2.3G 左右文本,含有 811 个小文件,合并 ChineseNLPCorpus 的多个评论数据,清洗、格式转换、拆分成小文件。

    可以通过上面这两个项目,清洗数据并做格式转换获得语料;也可以通过邮件申请获得单个项目的语料。

    展开全文
  • 其次,不同参与程度的消费者如何解释消费者决策的矛盾在线评论。 最后,通过实证研究得出以下结论:1)当产品功能属性的评价为正时,与属性内的歧义相比,属性间的歧义对消费者的购买意愿更为重要。 当关于产品享乐...
  • 留存分析是一种用来分析用户参与情况/活跃程度的分析模型,可考查进行初始行为后的用户中,有多少人会进行后续行为,这是衡量产品对用户价值高低的重要指标。如,为评估产品更新效果或渠道推...

    导语 | 本文实践了对于千万级别的用户,操作总数达万级别,每日几十亿操作流水的留存分析工具秒级别查询的数据构建方案。同时,除了留存分析,对于用户群分析,事件分析等也可以尝试用此方案来解决。

    文章作者:陈璐,腾讯高级数据分析师

      背景

    你可能听说过Growingio、神策等数据分析平台,本文主要介绍实现留存分析工具相关的内容。留存分析是一种用来分析用户参与情况/活跃程度的分析模型,可考查进行初始行为后的用户中,有多少人会进行后续行为,这是衡量产品对用户价值高低的重要指标。如,为评估产品更新效果或渠道推广效果,我们常常需要对同期进入产品或同期使用了产品某个功能的用户的后续行为表现进行评估 [1]。大部分数据分析平台主要包括如图的几个功能(以神策

    本文主要介绍留存分析工具的优化方案(只涉及数据存储和查询的方案设计,不涉及平台)。

    我想每个数据/产品同学在以往的取数分析过程中,都曾有一个痛点,就是每次查询留存相关的数据时,都要等到天荒地老,慢!而最近采用优化方案的目的也是为了提高查询的效率和减少数据的存储,可以帮助产品快速地查询/分析留存相关的数据。优化方案的核心是在Clickhouse中使用Roaringbitmap对用户进行压缩,将留存率的计算交给高效率的位图函数,这样既省空间又可以提高查询速度。希望本实践方案可以给你带来一些帮助和启示。下面主要分3个部分详细介绍:Roaringbitmap简介、思路与实现、总结与思考。

    一、Roaringbitmap 简介

     

    下面先简单介绍一下高效的位图压缩方法Roaringbitmap。先来看一个问题:

    给定含有40亿个不重复的位于[0,2^32-1]区间内的整数集合,如何快速判定某个数是否在该集合内?

     

    显然,如果我们将这40亿个数原样存储下来,需要耗费高达14.9GB的内存,这是难以接受的。所以我们可以用位图(bitmap)来存储,即第0个比特表示数字0,第1个比特表示数字1,以此类推。如果某个数位于原集合内,就将它对应的位图内的比特置为1,否则保持为0,这样就能很方便地查询得出结果了,仅仅需要占用512MB的内存,不到原来的3.4% [3]。但是这种方式也有缺点:比如我需要将1~5000w这5000w个连续的整数存储起来,用普通的bitmap同样需要消耗512M的存储,显然,对于这种情况其实有很大的优化空间。2016年由S. Chambi、D. Lemire、O. Kaser等人在论文《Better bitmap performance with Roaring bitmaps》与《Consistently faster and smaller compressed bitmaps with Roaring》中提出了roaringbitmap,主要特点就是可以极大程度地节约存储及提供了快速的位图计算,因此考虑用它来做优化。对于前文提及的存储连续的5000w个整数,只需要几十KB。

    它的主要思路是:将32位无符号整数按照高16位分桶,即最多可能有2^16=65536个桶,论文内称为container。存储数据时,按照数据的高16位找到container(找不到就会新建一个),再将低16位放入container中。也就是说,一个roaringbitmap就是很多container的集合 [3],具体细节可以自行查看文末的参考文章。

     

    二、思路与实现

     

    我们的原始数据主要分为:

    1.用户操作行为数据table_oper_raw

    包括时间分区(ds)、用户标识id(user_id)和用户操作行为名称(oper_name),如:20200701|6053002|点击首页banner 表示用户6053002在20200701这天点击了首页banner(同一天中同一个用户多次操作了同一个行为只保留一条)。实践过程中,此表每日记录数达几十亿行。

     

    2.用户属性数据table_attribute_raw

    表示用户在产品/画像中的属性,包括时间分区(ds)、用户标识(user_id)及各种用户属性字段(可能是用户的新进渠道、所在省份等),如20200701|6053002|小米商店|广东省。实践过程中,此表每日有千万级的用户数,测试属性在20+个。

    现在我们需要根据这两类数据,求出某天操作了某个行为的用户在后续的某一天操作了另一个行为的留存率,比如,在20200701这天操作了“点击banner”的用户有100个,这部分用户在20200702这天操作了“点击app签到”的有20个,那么对于分析时间是20200701,且“点击banner”的用户在次日“点击app签到”的留存率是20%。同时,还需要考虑利用用户属性对留存比例进行区分,例如只考虑广东省的用户的留存率,或者只考虑小米商店用户的留存率,或者在广东的小米商店的用户的留存率等等。一般来说,求留存率的做法就是两天的用户求交集,例如前文说到的情况,就是先获取出20200701的所有操作了“点击banner”的用户标识id集合假设为S1,然后获取20200702的所有操作了“点击app签到”的用户标识id集合假设为S2,最后求解S1和S2的交集:

     

    可以看到,当s1和s2的集合中用户数都比较大的时候,join的速度会比较慢。

    在此我们考虑前文说到的bitmap,假若每一个用户都可以表示成一个32位的无符号整型,用bitmap的形式去存储,S1和S2的求交过程就是直接的一个位比较过程,这样速度会得到巨大的提升。而Roaringbitmap对数据进行了压缩,其求交的速度在绝大部分情况下比bitmap还要快,因此这里我们考虑使用Roaringbitmap的方法来对计算留存的过程进行优化。

    1.数据构建

    整个过程主要是:首先对初始的两张表——用户操作数据表table_oper_raw和用户筛选维度数据表table_attribute_raw中的user_id字段进行编码,将每个用户映射成唯一的id(32位的无符号整型),分别得到两个新表table_oper_middle和table_attribute_middle。再将他们导入clickhouse,使用roaringbitmap的方法对用户进行压缩存储,最后得到压缩后的两张表table_oper_bit和table_attribute_bit,即为最终的查询表。流程图如下:

     

     

    (1).生成用户id映射表

    首先,需要构建一个映射表table_user_map,包含时间分区(ds)、用户标识id(user_d)及映射后的id(id),它将每个用户(String类型)映射成一个32位的无符号整型。这里我们从1开始编码,这样每个用户的标识就转化成了指定的一个数字。

     

     

    (2).初始数据转化

    分别将用户操作数据表和用户筛选维度数据中的imei字段替换成对应的数值,生成编码后的用户操作数据:

     

     

    和用户筛选维度数据:

     

     

    (3).导入clickhouse

    首先在clickhouse中创建相同结构的表,如table_oper_middle_ch:

     

     

    同样的,在clickhouse中创建表tableattributemiddle_ch。然后用spark将这两份数据分别导入这两张表。这一步导入很快,几十亿的数据大概10分多钟就可以完成

     

    (4).Roaringbitmap压缩

    对于用户操作流水数据,我们先建一个可以存放bitmap的表table_oper_bit,建表语句如下:

     

     

    用户属性数据table_attribute_bit也类似:

     

     

    这里索引粒度可设置小值,接着用聚合函数groupBitmapState对用户id进行压缩:

     

     

    这样,对于用户操作数据表,原本几十亿的数据就压缩成了几万行的数据,每行包括操作名称和对应的用户id形成的bitmap:

     

     

    同样的,用户属性的数据也可以这样处理,得到table_attribute_bit表,每行包括某个属性的某个属性值对应的用户的id形成的bitmap:

     

     

    至此,数据压缩的过程就这样完成了。

     

    2.查询过程

    首先,简要地介绍下方案中常用的bitmap函数(详细见文末的参考资料):1.bitmapCardinality

    返回一个UInt64类型的数值,表示bitmap对象的基数。用来计算不同条件下的用户数,可以粗略理解为count(distinct)2.bitmapAnd

    为两个bitmap对象进行与操作,返回一个新的bitmap对象。可以理解为用来满足两个条件之间的and,但是参数只能是两个bitmap3.bitmapOr

    为两个bitmap对象进行或操作,返回一个新的bitmap对象。可以理解为用来满足两个条件之间的or,但是参数也同样只能是两个bitmap。如果是多个的情况,可以尝试使用groupBitmapMergeState举例来说,假设20200701这天只有[1,2,3,5,8]这5个用户点击了banner,则有:

    # 返回5
    select bitmapCardinality(user_bit)
    from tddb.table_oper_bit
    where ds = 20200701 AND oper_name = '点击banner'

    又如果20200701从小米商店新进的用户是[1,3,8,111,2000,100000],则有:

    # 返回3,因为两者的重合用户只有1,3,8这3个用户
    select bitmapCardinality(bitmapAnd(
    	(SELECT user_bit
             FROM tddb.table_oper_bit
             WHERE (ds = 20200701) AND (oper_name = '点击banner')), 
    	(SELECT user_bit
    	 FROM tddb.table_attribute_bit
    	 WHERE ds = 20200701 and (attr_id = 'first_channel') and (attr_value IN ('小米商店')))))

    有了以上的数据生成过程和bitmap函数,我们就可以根据不同的条件使用不同的位图函数来快速查询,具体来说,主要是以下几种情况:

    a. 操作了某个行为的用户在后续某一天操作了另一个行为的留存:

    如“20200701点击了banner的用户在次日点击app签到的留存人数”,就可以用以下的sql快速求解:

     

     

    b. 操作了某个行为并且带有某个属性的用户在后续的某一天操作了另一个行为的留存:

    如“20200701点击了banner且来自广东/江西/河南的用户在次日点击app签到的留存人数”:

     

     

    c. 操作了某个行为并且带有某几个属性的用户在后续的某一天操作了另一个行为的留存:

    如“20200701点击了banner、来自广东且新进渠道是小米商店的用户在次日点击app签到的留存人数”:

     

     

    3.实践效果

    根据这套方案做了实践,对每日按时间分区、用户、操作名称去重后包括几十亿的操作记录,其中包含千万级别的用户数,万级别的操作数。最后实现了:

    存储

    原本每日几十G的操作流水数据经压缩后得到的表table_oper_bit为4GB左右/天。而用户属性表table_attribute_bit为500MB左右/天

     

    查询速度

    clickhouse集群现状:12核125G内存机器10台。clickhouse版本:20.4.7.67。查询的表都存放在其中一台机器上。测试了查询在20200701操作了行为oper_name_1(用户数量级为3000+w)的用户在后续7天内每天操作了另一个行为oper_name_2(用户数量级为2700+w)的留存数据(用户重合度在1000w以上),耗时0.2秒左右

     

     

    反馈

    最后和前端打通,效果也是有了明显的优化,麻麻再也不用担心我会转晕~

     

     

    三、总结与思考

     

    总的来说,本方案的优点是:

    • 存储小,极大地节约了存储

    • 查询快,利用bitmapCardinality、bitmapAnd、bitmapOr等位图函数快速计算用户数和满足一些条件的查询,将缓慢的join操作转化成位图间的计算

    • 适用于灵活天数的留存查询

    • 便于更新,用户操作数据和用户属性数据分开存储,便于后续属性的增加和数据回滚

    另外,根据本方案的特点,除了留存分析工具,对于用户群分析,事件分析等工具也可以尝试用此方案来解决。PS : 作者初入坑ch,对于以上内容,有不正确/不严谨之处请轻拍~ 欢迎交流~

    参考文献:

    [1] 解析常见的数据分析模型——留存分析:https://www.sensorsdata.cn/blog/jie-xi-chang-jian-de-shu-ju-fen-xi-mo-xing-liu-cun-fen-xi/

    [2] RoaringBitmap数据结构及原理:https://blog.csdn.net/yizishou/article/details/78342499

    [3] 高效压缩位图RoaringBitmap的原理与应用:https://www.jianshu.com/p/818ac4e90daf

    [4] 论文:Better bitmap performance with Roaring bitmaps:https://arxiv.org/abs/1402.6407v9?utm_source=feedburner&utm_medium=feed&utm_campaign=Feed%3A+DanielLemiresArticlesOnArxiv+(Daniel+Lemire%27s+articles+on+arXiv)

    [5] Clickhouse文档-位图函数:https://clickhouse.tech/docs/zh/sql-reference/functions/bitmap-functions/

     


     

     

    关注“腾讯云大数据”公众号,技术交流、最新活动、服务专享一站Get~

    展开全文
  • ↑关注 + 星标,每天学Python新技能后台回复...留存分析模型留存分析模型是一种用来分析用户参与情况/活跃程度的分析模型,考察进行初始行为的用户中,有多少人会进行后续行为。这是用来衡量产品对用户价值高低的重...
  • 项目交付计划编制

    2020-04-14 23:57:19
    工作分解 功能点拆分 依赖识别 估算 尽可能早估算 尽可能全员参与 估算数据作为交付计划编制输入 ...优先级高低 清晰程度 风险大小 全员参与 发布 内部评审 逐级汇报 会议纪要 发布计划 ...
  • APM(应用性能管理)留存分析使用

    千次阅读 2016-10-14 20:23:56
    留存分析是一种用来分析用户参与情况/活跃程度的分析模型,考查进行初始行为后的用户中,有多少人会进行后续行为。这是衡量产品对用户价值高低的重要指标。留存分析可以帮助回答以下问题: 一个新客户在未来的一...
  • 留存分析是一种用来分析用户参与情况/活跃程度的分析模型,考察进行初始行为的用户中,有多少人会进行后续行为。这是用来衡量产品对用户价值高低的重要方法。 漏斗分析模型 漏斗分析是一套流程式数据分析,它...
  • 众所周知,与新生婴儿讨论微积分是一个非常扯淡事情,所以,学识不为0人群才可以参与讨论, 现在给定一个m*n人群,给定每个人文化程度,每个人仅可和上下左右进行讨论,所以请你求出学术讨论组个数。...
  • 用户留存分析

    2019-11-27 21:25:36
    留存分析是一种用来分析用户参与情况/活跃程度的分析模型, 考察进行初始行为的用户中,有多少人会进行后续行为。 这是用来衡量产品对用户价值高低的重要方法。 留存分析可以帮助回答以下问题 一个新客户在...
  • 作情况,也能仿真单片机外围电路或没有单片机参与的其它电路工作情况。 因此在仿真和程序调试时,关心不再是某些语句执行时单片机寄存器和存储 器内容改变,而是从工程角度直接看程序运行和电路工作过程和...
  • 依据汽车智能化程度和人类在驾驶过程中参与不同,美国机动车工程师协会(SAE)将自动驾驶分为6 级(L0-L5)、美国高速公路交通安全管理局(NHTSA)将自动驾驶分为5 级(L0-L4)。在SAE 分级标准下,L0-L2 属于...
  • 在无边界组织中,管理者要充分授权给下属,使下属有一定程度的自主权,决策由那些最接近事实并直接对事实的结果负责的那些员工做出这既増加了员工的参与感,提髙了他们的积极性,又能够缩短从决策到执行之间的时间,...
  • 勘探类型的划分:是从煤炭资源勘探工作需要出发,根据影响煤矿床勘探难易程度的主要地质因素,对煤矿床的分类。划分勘探类型的目的是确定勘探工程的基本线距和工程密度,为勘探工程的布置提供依据,同时勘探类型也是...
  • 2019数据运营思维导图

    2019-03-29 21:34:09
    付费率的高低并不代表付费用户的增加和减少 游戏类型不同,付费率有较大的差异 生命周期 定义 一个用户从首次进入游戏到最后一次参与游戏之间的时间间隔 一般计算平均值 14日LTV(新用户后续付费能力指标) 名词定义...
  • 数据运营思维导图

    2018-04-26 14:24:22
    在线人数一向是游戏火热程度的最好衡量 需要有同期对比功能,有参照物才能更好的比较 3、付费渗透 日付费率变化折线图 日付费率通常不稳定,一般情况下看周付费率或月付费率 付费率=充值人数/活跃人数*100% ...
  • 既然传统经济学的各个领域同企业都有某种程度的关系,管理经济学当然要从所有这些领域中汲取有用的东西。各个领域同企业关系实际上深浅不一,这些领域与管理经济学的关系在程度上也就不同。举例来说,在管理经济学中...
  • 于是便形成了今天软件行业中一个普遍存在根本问题:软件复杂度超出了软件开发者可以驾驭的程度,软件质量在最重要开发源头危机四伏。 程序员是真正为软件大厦“添砖加瓦”人,程序员水平高低直接关系着...

空空如也

空空如也

1 2
收藏数 23
精华内容 9
关键字:

参与程度的高低