在冬季和夏季使用一种颜色? 搜索数据的季节性



一旦我们决定看看2GIS用户在不同城市的季节性兴趣是什么。 人们对鲜花,新年礼物和轮胎的兴趣突飞猛进。 我们决定不局限于此,而是通过检查所有113个运营城市的所有活动领域来进一步发展。

在本文中,我将告诉您我们如何寻找季节性以及在其中发现了用户行为的哪些特征。

为什么需要测量季节性?


2GIS用户的需求全年都在变化:消费品,服务,建筑,公共服务。 季节性知识之所以有用,有以下几个原因:

  • 现在和不久的将来,我们开始更多地了解用户的价值和兴趣。
  • 我们可以“预测”用户的请求。
  • 销售经理专注于与用户相关的活动领域。

交通类型


在讨论我们如何处理流量之前,有必要澄清一下,我们将其分为几种类型。

恢复是一种流量,用户可以在其中确切地知道他想联系的公司。 他需要澄清地址,工作时间表或找到入口。 在这种情况下,搜索是通过公司名称,电话号码和公司本身的其他属性进行的。

发现流量是指用户以更笼统的术语提出请求时:“软垫家具”,“列宁吃”,“浴室”。 也就是说,用户经常致电组织或访问其站点来探索市场选择和报价。

用户使用地图时会发生地理交通。 例如,它正在寻找离房屋最近的药房或服务站。

所有用户请求和所有后续操作都标记在流量上。 为了搜索季节性,分析采用发现+地理流量。 由于它们首先对应于用户兴趣的表现,其次可以对其进行控制。 您无法管理恢复流量。

关于趋势


图表1:您看到季节性吗?
图表1:您看到季节性吗?

在开始搜索季节性之前,您需要考虑不同类型设备上流量的变化。 我们考虑到WinPhone和PC版本的受众不断下降。 在线,Android,iOS在不断发展。

假设检验


为固定序列制定了确定季节性的标准。 有必要检验该序列包含趋势的假设。 我们将时间序列视为一个随机过程。 然后,该系列的元素是一些随机变量的实现。

我们可以检验所有样本值均属于平均值为m的相同总体的假设。 那么主要假设是:
H0mi=mi=1,2...N
反对竞争对手趋势假说
$ inline $ H_1:∣m_ {i + 1} −m_i∣> 0,i = 1,2,...,N − 1 $ inline $
其中N是一行中的元素数。

为了检验假设,您需要使用趋势显着性的标准之一。 在研究的基础上,选择了反演标准

如果不拒绝该假设,则有必要从数据中删除趋势。 我们假设在我们的数据中只能存在线性趋势。 哦,那将是指数! 我们还将假设拐点不能超过一个。

图2:时间序列(来自图1)及其趋势
图2:时间序列(来自图1)及其趋势

关于耙和发现


我们概述了研究的边界,并着手检验假设。 当然,这并非没有ra漏和发现:由于任务不仅仅限于人口超过100万人的城市中的流行服务,因此,我们整理了一系列值得关注的特殊情况。

  1. 数据缺口。 在活动的狭窄区域中,某些日期可能没有数据。 这种情况对小城市尤其重要。 为了正确构建回归,必须考虑此功能。
  2. 如果找到拐点,请考虑其与该行的起点或终点的距离。 可能会误解一系列在边界条件下的行为。 例如,在图表2中,前120点似乎表明分段线性增长。 但是,实际上,它表明了自己的季节性,我们将在后面看到。
  3. 选择正确的参考点。 为了获得正确的系数,您需要使用从第一个有效点开始的序列,并记住该点的X坐标(数据出现在序列中的日期)。 此时将在坐标系中以0建立趋势。 这种情况对于球体之间的比较很重要。 例如,在2GIS中,城市不是同时启动的,因此它们开始在不同时间发送统计信息。 对于新业务的出现,例如理发店,也是如此。
  4. 也许最困难的事情是在详细程度和数据量是否适当之间找到折衷方案。 我们确定了三个维度:城市,活动领域,用户设备平台。

图3:没有趋势的系列
图3:没有趋势的系列

季节性搜寻


从时间序列中减去相应的趋势后,我们可以进行寻找季节性的任务。 它包含两个子任务:

  1. 检测序列中存在季节性的事实。
  2. 旺季和淡季的定义-这具有实际价值。

相关检测


R和Python中都有现成的相关搜索功能。 我们使用了皮尔逊相关。 使用用户兴趣向量时,请注意以下几点:

  • 从原始序列中减去趋势后,可以获得负值。 在这个阶段这是正常的。
  • 对于我们的任务,检查365天时间序列的相关性就足够了。 是的,a年的影响微不足道,我们没有考虑。
  • 要搜索季节性,您必须至少有两个完整时期的数据。 我们的计算使用了四个时期的数据。

我们正在寻找两个向量的相关性:X:[0; N-365],Y:[366; N]。 其中N是行的长度。

图4:相关检测
图4:相关检测

得到好处


存在季节性的事实没有实际价值。 您需要了解下个月将对活动领域进行哪些关注:增加,降低或正常。

选择乘法量表作为最终结果。 单位是用户在活动领域中的“正常”水平。 一个值以外的值表示利息的倍数增加或减少。

就我们而言,[暂时]足够一个临时的规模持续一个月就足够了。 为了确定级别1,使用了每月用户关注度的中位数。 然后从该中值计算出倍数偏差。

图5:年度季节性
图5:年度季节性

现在该揭开文章图形显示哪些数据的秘密了。 在此图和所有以前的图表上-单击圣彼得堡的博物馆。 从最后的时间表可以看出,博物馆在1月的假期,很多的假期和夏天很受欢迎。

如果...


...采用和提供算法不是用户的利益,而是销售的利益?

动作算法是相同的:

  1. 我们正在寻找趋势。 城市的受众在不断增长,随之而来的是广告商的数量也在增长。 有必要减去与2GIS作为广告平台的日益普及相关的趋势,以便获得行业的兴衰。
  2. 我们发现每年的销售相关性,然后是旺季和淡季。

进行了许多调整


2GIS中的广告是按月出售的,因此他们花了一个月的时间来制作广告,但是用户的季节性最多可以分析一天。 为了向后兼容,我们对算法进行了调整以使其适用于任意序列,其中X轴是该点的序列号,Y轴上有一个特定值(在此级别上,值的语义无关紧要)。

通常,一系列销售(来源)的参考点与用户季节性的参考点不一致。 毕竟,起初城市吸引了众多观众,然后才出现广告。 在此阶段,您不应该将两个季节的结果相结合。

由于销售是按月进行的,因此我们在排名中的得分明显减少。 在这种情况下,应该在12点而不是365处考虑相关性。

图6:销售季节性
图6:销售季节性

最后,我们决定将销售季节性强加给用户季节性。 现在,您可以看到我们在必要的地方出售广告,并且落后于用户需求。

例如,用户有兴趣从4月到10月在下诺夫哥罗德购买混凝土。 公司仅在五月至九月从事促销活动。

图7:用户季节性和销售季节性的交集
图7:用户季节性与销售季节性的交集(绿色-用户,蓝色-销售,红色-符合)

做了什么


上述所有内容均在MS SQL Server 2016中实现。为了搜索线性回归和相关性,使用了R(自2016版以来已包含在服务器中)。由于SQL Server上已有数据仓库和用户统计数据分析,因此使用R非常方便用于数学计算。

从TSQL使用R的示例:

INSERT INTO #tmp EXEC sp_execute_external_script @language = N'R', @script = @R, @input_data_1 = N'SELECT DataId, Number, Value FROM #data ORDER BY 1, 2' 

其中:

  • 变量R直接包含R代码;
  • language = N'R'-表示在R变量中传递的脚本包含R语言代码。在SQL Server 2017中,除了R之外,还可以使用language = N'Python'。 然后,因此,必须将Python代码传递给script参数。
  • input_data_1-包含一个SQL查询,其R代码内的结果可以作为InputDataSet访问;
  • 该过程的结果将是RecordDataSet,格式为OutputDataSet <-calcAllTrend(data = InputDataSet);
  • 确保指定结果记录的格式:列的数量和类型。 在这种情况下,OutputDataSet的格式由记录结果的#tmp表确定。 或者,您可以使用WITH RESULT SETS来描述结果记录集。

在我们的案例中,事实证明,通过访问R服务直接占用了sp_execute_external_script运行时的很大一部分。 R代码本身很快就解决了。

让我提醒您,我们想计算涵盖2GIS和所有活动领域的所有城市的趋势和季节性。 因此,我们决定不发送一行(数字,值)到InputDataSet,而是一次发送几行(按DataId分组)。 并且DataId周期是在R内部组织的。因此,我们大大节省了调用R服务的时间。

生活中的事实


您将文章阅读到最后,值得称赞。 为了让您在结果前感到愉悦,我们分享在季节性分析中发现的有趣事实。

事实1


驾驶者从个人经验中知道,寻找轮胎和轮胎配件的季节是春季和秋季。 但是,确切地说,不同城市的季节可能非常不同。 因此,在形成集合和仪表板(产品中的启动屏幕)时,考虑每个特定城市的季节性非常重要。

图8:克拉斯诺达尔,新西伯利亚和诺里尔斯克的轮胎季节性
图8:克拉斯诺达尔,新西伯利亚和诺里尔斯克的轮胎季节性

事实二


即使在同一活动领域内(在不同类型的设备上),季节性也会有所不同。 例如,大屏幕上的“新年礼物”将从10月开始搜索。 而在移动版本中,搜索会在一个月后开始,高峰期接近新年。

图表9:在2GIS移动版本中在线搜索圣诞节礼物
图表9:在2GIS移动版本中在线搜索圣诞节礼物

事实三


在研究季节性问题的过程中,我们发现了一个活动领域,每三个月展示一次感兴趣的领域。 俄罗斯的不同城市也是如此。
尝试猜测这是什么业务。

扰流板尖端
俄罗斯的不同城市。 因此,既不是天气,也不是地区,也不是本地企业,而是全球通用的事物。
3个月=季度。 注意四月...

图10
图10

答案
这些是社会保险基金-季度报告每三个月提交给FSS一次,而从每年1月1日起报告格式的变化可以解释4月的高峰。

再说一次主要的事情


您要在数据中寻找相关性吗? 别忘了准备以下数据:过程差距,趋势和排放清除。 请记住,准备工作将花费大部分时间。

在处理行的阶段,尽可能地从语义中抽象出来:使用值和点的序列号,然后代码将更易于重用。 在处理的每个阶段进行可视化都会有很大帮助。

PS:发现趋势和季节性的任务是另一项任务的一部分-在2GIS中获取广告后,预测用户注意力的变化。 如果您有兴趣,我准备告诉您我们如何进行预测。

Source: https://habr.com/ru/post/zh-CN414041/


All Articles