【问题标题】:How to identify a new pattern in a URL with a machine learning algorithm (Text mining)如何使用机器学习算法识别 URL 中的新模式(文本挖掘)
【发布时间】:2013-04-01 18:03:35
【问题描述】:

我在分析多个 URL 后尝试识别新模式。因此,假设我正在调查假设的网站 Yoohle.com,它们的 URL 具有以下结构。

  • 域 = yoohle.com
  • q= 搜索词组
  • lan= 使用的语言
  • pr= partner_id
  • br= browser_id

所以示例网址看起来像这样

www.yoohle.com/test_folder/test_page?q=hello+world&lan=en&pr=stackoverflow&br=chrome

如果我正在调查该网站的网络流量并看到每月异常增加,我想找出造成这种情况的原因。在这个例子中,我可以只解析 URL 并查看 pr= 值,因为它会告诉我是否有新的合作伙伴关系(也许 stackoverflow 将由 yoohle.com 提供支持并推动增长等)

问题是,我如何构建能够比较 2 个月(或更长时间)并准确告诉我推动增长的因素。我想得到类似的东西,“我们看到了增长,它是由以下模式驱动的”

www.yoohle.com/test_folder/test_page%pr=stackoverflow%

棘手的部分是,与此示例不同,您对令牌的含义一无所知,因为我不知道什么令牌代表 partner_id。另一个问题是,如果我们逐个标记,这会产生误导,因为假设用户仍将使用英语作为语言,lan=en 也会与新的合作伙伴一起使用。

我的想法是通过查看所有组合来分析令牌,但这非常昂贵,(在本示例中为 4!,对于其他网站可能为 10+!)。同样分析令牌本身也不能解决问题,因为我仍然需要分析令牌的值。

我尝试了 k-means 聚类,apriori 算法对 URL/文本挖掘做了一些研究,但无法得到我想要的。任何关于如何构建算法的想法都是有益的。

假设您正在查看实时数据,因此我们讨论的是在给定月份分析大约 10 万个 URL。

【问题讨论】:

  • 由于这个问题更多是关于统计方法而不是关于编程,我认为 stats.SE 的人可能更有能力回答这个问题。版主,我们可以迁移问题吗?

标签: algorithm machine-learning data-mining text-mining web-analytics


【解决方案1】:

我会走下面的路。您可以创建下表:

URL
time
time_month -- time rounded to month, for demonstration purpose
q_bol   -- boolean flag whether question parameter was used
q       -- question parameter value
lan     -- language parameter value
lan_bol -- boolean flag whether language parameter was used
pr      -- partner parameter value
pr_bol  -- boolean flag whether partner parameter was used
br      -- browser parameter value
br_bol  -- boolean flag whether browse parameter was used

现在,您可以编写一些查询。

with t as (
select 
  time_month,
  q_bol, lan_bol, pr_bol, br_bol, count(*)
from
  urldata
where
  time_month > '2013-02-01'::date and time_month < '2013-04-01'::date -- last two months data
group by 
  time_month
)

, u as (
select
*,
t2-coalesce(t1,0) as abs_change, -- change in pattern MoM,
case when t1 is null then 0 else t2/t1 end as relchange  -- relative change
from
t t1 full outer join t t2 using (q_bol, lan_bol, pr_bol, br_bol)
) 

select * from u where abs_change > 5000 or relchange > 3

上面的查询为您提供了每月变化超过 5000 次或每月增加超过 300% 的参数模式。如果您可以在您的 sql 系统中使用 group by rollup,它还会提供更高级别的聚合(三个参数、两个参数、一个参数的组合)。

你可以对参数值做同样的事情。因为你不知道值会出现什么标记,你可以在下面的表结构中解析 url:

-- urls
id_url
url
time

-- parameters
id_url
token
value

然后您将需要以某种方式重写上面的查询,例如你可以在PostgreSQL中使用数组聚合函数array_agg()

【讨论】:

    猜你喜欢
    • 2017-03-20
    • 1970-01-01
    • 2011-11-22
    • 2011-10-29
    • 2019-06-16
    • 2012-12-29
    • 2010-12-22
    • 2012-06-25
    • 2016-06-07
    相关资源
    最近更新 更多