1

我試圖在分析多個URL後識別新模式。假設我正在研究假想的網站Yoohle.com,它們的URL具有以下結構。如何使用機器學習算法識別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% 

棘手的部分是,你不知道,因爲我會什麼記號不像這個例子的意思是什麼不知道什麼令牌代表partner_id。另一個問題是,如果我們通過令牌來觀察令牌,這將會產生誤導,因爲假設用戶仍然使用英語作爲語言,lan = en也會與新的合作伙伴進行合作。

我的想法是通過查看所有組合來分析令牌,但代價非常高(在此示例中爲4 !,對於其他網站可能爲10+!)。分析令牌本身也不會解決問題,因爲我仍然需要分析令牌的值。

我試過k-means聚類,apriori算法做了一些關於URL /文本挖掘的研究,但沒有得到我想要的。關於如何構建算法的任何想法都是有益的。

想象一下,您正在看到實時數據,因此我們正在討論分析給定月份中大約100K個URL的情況。

+0

由於這個問題更多的是關於統計方法,而不是關於編程,我認爲在stats.SE的人可能更有能力回答這個問題。版主,我們可以遷移這個問題嗎? – blubb 2013-04-10 17:25:08

回答

0

我會走下面的路。您可以創建下表:

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,它也可以提供更高級別的聚合(三個參數,兩個參數,一個參數的組合)。

你可以做的參數值非常相似。

-- urls 
id_url 
url 
time 

-- parameters 
id_url 
token 
value 

然後,你將需要重寫上面以某種方式,例如查詢:因爲你不知道什麼令牌將存在與價值,你可以在表的結構如下解析網址你可以在PostgreSQL array_agg()中使用數組聚合函數。