异常检测群体任务:Spotify Wrapped,第三部分
2025年3月26日 | by mebius
作者:来自 ElasticPhilipp Kahr
异常检测一tgcode开始可能会让人望而生畏,但在这篇博客中,我们将深入探讨它,并了解不同的任务如何帮助我们发现 Spotify Wrapped 数据中的异常模式。
在第一部分,我们讨论了如何获取你的 Spotify Wrapped 数据并对其进行可视化。在第二部分,我们讲解了如何处理数据以及如何可视化展示。在第三部分,我们将探讨如何在你的 Spotify Wrapped 数据中检测异常。
异常检测作业是 Elastic 中用于查找数据中异常模式的工具。它利用机器学习来学习数据的正常行为,并尝试发现不符合这种正常行为的数据点。这对于发现数据中的异常模式非常有用,比如你听歌数量的突然激增,或者你听的歌曲平均时长的突然变化。
异常检测作业有多种类型:
-
单指标(Single metric)
-
多指标(Multi-metric)
-
群体(Population)
-
分类(Categorization)
-
罕见(Rare)
-
地理(Geo)
-
高级(Advanced)
现在,我们将来看看其中的一些类型。
群体作业 – population job
群体(Population)作业是一种异常检测作业,它尝试在数据分布中查找异常模式。该分布由群体定义。让我们一起创建这个作业!
-
进入 Kibana 的 Machine Learning 应用。
-
点击“创建作业”(Create job)。
-
选择 Spotify-History 数据视图(如果你还没有这个数据视图,请从这里导入仪表板和数据视图)。
-
选择 群体(Population)。
-
选择合适的时间范围,例如 2017 年 1 月 1 日 至 2024 年 12 月 31 日。
-
选择要定义群体的字段,让我们使用 artist(艺术家)。
-
在 添加度量(Add Metric) 中,选择 sum(listened_to_ms)。这将计算你听某个特定艺术家的总时长。
-
在右下角的 影响因子(Influencers) 里添加 title(歌曲标题)。这样在异常发生时,我们可以获取更多信息。
-
时间桶跨度(Bucket Span) 是一个关键参数。在我的案例中,观察日常模式最为合理,你甚至可以尝试查看每周模式。这取决于多个因素。如果设定小于 1 天,可能会导致结果过于精细,影响检测效果。
-
点击tgcode 下一步(Next),给任务命名,并继续点击 下一步 直到 创建任务(Create job) 界面。确保 立即开始(Start immediately) 的开关已开启,然后点击 创建任务(Create job)。任务将立即启动,并且界面可能会如下所示:
太好了!现在深入细节。点击 查看结果(View Results)—— 这个页面对我们的分析将非常有趣。
解释起来很简单。所有 红色 代表高分异常,而 蓝色或较浅的颜色 代表较低的异常分数。我们立刻注意到,在右侧,Kraftklub 乐队的某些条形图是 红色、橙色、红色,并逐渐变为 蓝色。
在搜索栏输入 artist: Kraftklub 进行聚焦后,我们立即发现:2022年9月30日,实际播放时间 3.15 小时,而平时大约 3.75 分钟。对我来说,这意味着我通常每天听 一首 Kraftklub 的歌曲,但在这一天,我连续听了 3小时以上,这显然是一个异常。
是什么触发了这样的听歌行为?演唱会 似乎不太可能,因为它是在 2022年11月19日,还比较远。那么,是否是新专辑发布?
我们可以点击这个 异常点,然后在下拉菜单中选择 在 Discover 中查看(View in Discover) 来进一步探查。
一旦进入 Discover 页面,我们可以进行额外的可视化和数据拆解,进一步调查这个异常。我们会提取 title、album 和 spotify_metadata.album.release_date 字段,以查看是否在那一天有新专辑发布。
我们可以立刻看到,2022年9月22日,专辑 KARGO 发布了。8天后,似乎我对这张专辑产生了兴趣,并开始听它。
我们还能发现什么呢?也许是季节性的原因?让我们放大查看 Fred Again..,我听他听得很多(从第二篇博客可以看出来)。大约有连续10天的异常,平均来说,我每天大约听 Fred Again 一个小时。
我知道 Fred Again.. 在那段时间可能没有发布专辑。ES|QL 将帮助我们找出更多细节。切换到 ES|QL 时,时间选择器的值将会保留,但搜索栏中的任何过滤器会被移除。我们需要做的第一件事是把过滤器重新加回来。
FROM spotify-history
| WHERE artist=="Fred again.."
接下来我想知道我听了多少专辑,以及是否有任何专辑是在那些日子附近发布的。
FROM spotify-history
| WHERE artist=="Fred again.."
| stats count(), values(spotify_metadata.album.release_date) by album
我们执行一个简单的计数来获取记录的数量。这些值(values)允许我们检索文档的值,而不对其进行任何聚合,并按专辑名称拆分。我没有看到在异常日期附近发布的专辑。我的 “日期推算(head date math)” 并不总是准确,所以让我们tgcode添加一个从发布日期到第一次聆听日期(在这个异常期间)的天数差,因为很明显专辑发布并没有触发这个异常。
单一指标 – single metric
单一指标作业是异常检测作业的一种类型,旨在寻找单一指标中的异常模式。该指标由你选择的字段定义。那么,什么是有趣的单一指标呢?我们可以使用 listened_to_pct
,它告诉我们在跳过下一首歌之前,我听完了多少部分。这非常有趣——让我们看看是否有某些日子我跳过的歌曲比其他日子多。
-
转到 Kibana 中的机器学习应用程序。
-
点击 “Create job”。
-
选择 Spotify-History 数据视图
-
选择 “Single Metric”。
-
选择一个合适的时间范围,对我来说是 2017年1月1日 到 2024年12月31日。
现在有点棘手,我们使用 mean()
、high_mean()
还是 low_mean()
?嗯,这取决于我们希望检测什么样的异常。mean
会为低值(如 0)和高值都触发异常。而 high_mean
更多的是针对高值,意味着如果听歌完成度为 0 的情况持续几天,它不会触发异常,而 mean
和 low_mean
会。high_mean
通常用于检测数据中的峰值。如果你的数据处理服务非常快,不希望处理时间超过 1 毫秒,但是如果需要 10 毫秒,你就希望它触发异常。
在这种情况下,我想我们应该尝试 mean()
,看看结果如何。
-
别忘了将桶跨度设置为 1 天。
-
点击下一步(next),给作业取一个有效名称,然后继续点击下一步(next)直到显示 create job。确保 “Start immediately” 开关打开。点击 “create job”,它会立即启动。
这里是结果:
真有趣,看到在2024年8月18日,我平均只听了大约3%的歌曲总时长。通常,我会在按下 “下一曲” 按钮之前听完大约70%的歌曲。总的来说,我认为选择 mean() 来处理这个指标是个不错的选择。
多指标
现在,我想弄清楚是否有某一首歌在某个艺术家中出现过异常峰值。为此,我们可以使用多指标作业。
-
转到 Kibana 中的机器学习应用程序。
-
点击 “Create job”。
-
选择 Spotify-History 数据视图。
-
选择 “Multi Metric”。
-
选择合适的时间范围,对于我来说是从 2017年1月1日到2024年12月31日。
-
选择 distinct count(title) 并按 artist 进行分组,添加 artist、title、album 到影响者中。
-
别忘了将桶跨度设置为 1d。
它可能会给你一个关于高内存使用的警告,因为现在它为每个艺术家创建了一个单独的模型,而不是在一个大模型中建模所有内容。这可能会占用大量内存,因此要小心。进入相同的异常检测表视图,随机选择任何专辑。我选择了 Meute 的《Live in Paris》。乍一看,这非常有趣,也展示了异常检测的准确性。
我在我的收藏歌曲中有专辑《Live in Paris》中的歌曲《You & Me》,以及大约 10 首来自不同专辑的其他歌曲。我在2024年12月27日、28日、29日和30日积极地听了《Live in Paris》专辑。
结论
在这篇博客中,我们深入探讨了异常检测及其可能涉及的内容。一开始可能会让人觉得有些复杂,但一旦掌握了,就不那么难,而且它也能提供非常好的快速洞察。
本文中描述的任何功能或功能的发布和时机仍然由 Elastic 单独决定。任何当前不可用的功能或功能可能不会按时交付,或者根本无法交付。
在这篇博客文章中,我们可能使用或提到了一些第三方生成性 AI 工具,这些工具由各自的所有者拥有和运营。Elastic 对这些第三方工具没有控制权,也不对其内容、操作或使用承担任何责任或义务,也不对因使用这些工具可能产生的任何损失或损害承担责任。在使用 AI 工具时,请对个人、敏感或机密信息保持谨慎。你提交的任何数据可能会用于 AI 训练或其他目的。不能保证你提供的信息会保持安全或机密。使用任何生成性 AI 工具之前,你应该熟悉其隐私政策和使用条款。
Elastic、Elasticsearch、ESRE、Elasticsearch Relevance Engine 及相关标志是 Elasticsearch N.V. 在美国及其他国家的商标、标志或注册商标。所有其他公司和产品名称是各自所有者的商标、标志或注册商标。
想要获得 Elastic 认证吗?了解下一个 Elasticsearch 工程师培训的时间!
Elasticsearch 提供了许多新功能,帮助你为你的用例构建最佳的搜索解决方案。深入了解我们的示例笔记本,了解更多信息,开始免费的云试用,或者立即在本地机器上尝试 Elastic。
原文:Anomaly detection population jobs: Spotify Wrapped, part 3 – Elasticsearch Labs
文章来源于互联网:异常检测群体任务:Spotify Wrapped,第三部分
作者:来自 Elasticdrewdaemon ES|QL 很重要 正如你可能已经听说的那样,ES|QL 是 Elastic 的新查询语言。我们对 ES|QL 寄予厚望。它已经很出色了,但随着时间的推移,它将成为与 Elasticsearch 中的数据交互的最…