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

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

在分析了一些 URL 之后,我试图找出新的模式。比方说,我正在调查假设的网站 Yoohle.com,它们的 URL 具有以下结构。

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

所以一个示例 url 看起来像这样

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%

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

我的想法是通过查看所有组合来分析 token ,但成本非常高(在本例中为 4 个!其他网站可能超过 10 个!)。此外,分析代币本身并不能解决问题,因为我仍然需要分析代币的值(value)。

我尝试了 k-means 聚类,先验算法对 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

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

您可以对参数值做同样的事情。因为你不知道哪些标记会与值一起出现,你可以在以下表结构中解析 url:

-- urls
id_url
url
time

-- parameters
id_url
token
value

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

关于algorithm - 如何使用机器学习算法识别 URL 中的新模式(文本挖掘),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15916668/

相关文章:

arrays - 有时将子数组列表中的项目分发到其他子数组/作品然后随机出错

algorithm - 将网格划分为四面体?

python - 堆叠分类器 : IndexError while fitting the data

twitter - Twitter 源的聚类

algorithm - 列表的唯一子集的组合

c++ - 试图在 C++ 中反转字符串但返回相同的字符串

machine-learning - 从 scikit_learn 反转 MinMaxScaler

matlab - 两个特征选择算法的结果不匹配

r - R tm 文本挖掘中的自冲突停用词

python - 在 sklearn 中持久化数据