Algorithm 如何使用机器学习算法识别URL中的新模式(文本挖掘)

Algorithm 如何使用机器学习算法识别URL中的新模式(文本挖掘),algorithm,machine-learning,data-mining,text-mining,web-analytics,Algorithm,Machine Learning,Data Mining,Text Mining,Web Analytics,在分析了大量URL之后,我试图识别新的模式。比如说,我正在调查假设的网站Yoohle.com,他们的URL有以下结构 domain=yoohle.com q=搜索短语 lan=使用的语言 pr=合作伙伴id br=浏览器\u id 因此,示例url如下所示 www.yoohle.com/test_folder/test_page?q=hello+world&lan=en&pr=stackoverflow&br=chrome 如果我正在调查这个网站的网络流量,发现这个

在分析了大量URL之后,我试图识别新的模式。比如说,我正在调查假设的网站Yoohle.com,他们的URL有以下结构

  • domain=yoohle.com
  • q=搜索短语
  • lan=使用的语言
  • pr=合作伙伴id
  • br=浏览器\u id
因此,示例url如下所示

www.yoohle.com/test_folder/test_page?q=hello+world&lan=en&pr=stackoverflow&br=chrome
如果我正在调查这个网站的网络流量,发现这个月的流量异常增加,我想找出原因。在本例中,我可以解析URL并查看pr=值,因为它会告诉我是否有新的合作关系(可能stackoverflow将由yoohle.com提供动力,从而推动增长等)

问题是,我如何构建一个健壮的东西,能够比较2个月(或更长)的时间,并准确地告诉我是什么推动了增长。我想得到这样的结果,“我们看到了增长,这是由以下模式驱动的”

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

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

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


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

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

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

然后,您需要以某种方式重写上面的查询,例如,您可以在PostgreSQL
array\u agg()

中使用数组聚合函数,因为这个问题更多的是关于统计方法,而不是关于编程,我想stats.SE的人员可能更有能力回答这个问题。主持人,我们可以把问题转移到其他地方吗?
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
-- urls
id_url
url
time

-- parameters
id_url
token
value