99999久久久久久亚洲,欧美人与禽猛交狂配,高清日韩av在线影院,一个人在线高清免费观看,啦啦啦在线视频免费观看www

熱線電話:13121318867

登錄
首頁精彩閱讀淺析時間序列用戶生命周期的聚類方法
淺析時間序列用戶生命周期的聚類方法
2016-07-08
收藏

淺析時間序列用戶生命周期的聚類方法

一、時間序列

時間序列和時間序列分式分別是什么?

時間序列是指將某種現(xiàn)象某一個統(tǒng)計指標在不同時間上的各個數(shù)值,按時間先后順序排列而形成的序列。

而時間序列分析(Time series analysis)是一種動態(tài)數(shù)據(jù)處理的統(tǒng)計方法。該方法基于隨機過程理論和數(shù)理統(tǒng)計學(xué)方法,研究隨機數(shù)據(jù)序列所遵從的統(tǒng)計規(guī)律,以用于解決實際問題。(引自百度百科)

從上述說明可以看出,時間序列不僅僅只是一個序列數(shù)據(jù),而是一個受系統(tǒng)影響很大的序列數(shù)據(jù),時間序列的數(shù)據(jù)本身存在于生活中的各個領(lǐng)域里。人們對時間序列的分析從很早以前就開始了,發(fā)展至今,在大數(shù)據(jù)環(huán)境下,采用數(shù)據(jù)挖掘的方法來表示數(shù)據(jù)內(nèi)部規(guī)律也成為了分析時間序列的一種重要方向和趨勢。

二、時間序列特征

時間序列變量有以下兩大主要特征

1.非平穩(wěn)性(nonstationarity,也作不平穩(wěn)性,非穩(wěn)定性):即時間序列變量無法呈現(xiàn)出一個長期趨勢并最終趨于一個常數(shù)或是一個線性函數(shù)。也就是說,時間序列在每個時間周期里可能出現(xiàn)兩種變化,一種是受整個系統(tǒng)變化的影響,另一種是隨機的變化。

2.波動幅度隨時間變化(Time—varying Volatility):即一個時間序列變量的方差隨時間的變化而變化。

正是因為這種不確定性和各自間的相關(guān)性,使得有效分析時間序列變量十分困難。舉例來說,每個人在不同的時間點產(chǎn)生的行為都是隨機行為,但即將產(chǎn)生的行為或多或少又會受個人過去的行為習(xí)慣所影響。假設(shè)當(dāng)我們有這個人過去的全部行為數(shù)據(jù)時,首先希望通過某種方式刻畫這個人過去的行為,并最終找到和這個人有類似行為習(xí)慣的人群。

傳統(tǒng)的劃分方法很多,但都是通過某個行為來進行分類,將所有相關(guān)行為放在時間序列上來進行整體觀察。就用戶生命周期而言,國內(nèi)外都有很多這個方向的研究。那么能否找到一種方法通過大量的數(shù)據(jù)來實踐時間序列的聚類方法優(yōu)劣性,并應(yīng)用到實際項目中呢?

三、相關(guān)案例

時間序列在電子商務(wù)領(lǐng)域的研究,近幾年才逐漸興起。我們在項目中希望能夠?qū)τ邢嗨菩袨榈娜巳鹤鰟澐郑l(fā)現(xiàn)由于人的很多行為是相互關(guān)聯(lián)的,并且在時間的維度中還會發(fā)生變化,可能受過去的影響,也可能不受影響,所以,這一秒和下一秒都是不可確定的,從傳統(tǒng)方法的聚類存在局限性。

但我們從長期趨勢研究中發(fā)現(xiàn)消費的某些行為可能是固定的,比如定期的購買、季節(jié)的變換、促銷活動的影響等,這些都是和時間周期有關(guān)系的,于是我們想到使用基于時間序列的聚類的方法來進行嘗試,得到了一些新的效果。隨著時間的變換,人的行為可能和時間進行關(guān)聯(lián)后會產(chǎn)生不同的結(jié)果,我們最后不僅能得到這個用戶局部的行為規(guī)律,也可以看到用戶在整體時間周期里的行為的規(guī)律,通過觀察整體和局部,便能更好進行用戶畫像。

四、時間序列的聚類

關(guān)于時間序列聚類的方法,簡單總結(jié)如下:

1.傳統(tǒng)靜態(tài)數(shù)據(jù)的聚類方法有:基于劃分的聚類、基于層次的聚類、基于密度的聚類、基于格網(wǎng)的聚類、基于模型的聚類;

2.時間序列聚類方法:大概有三種,一是基于形態(tài)特征,即形狀變化,包括全局特征和局部特征;二是基于結(jié)構(gòu)特征,即全局構(gòu)造或內(nèi)在變化機制,包括基本統(tǒng)計特征、時域特征和頻域特征;三是基于模型特征,參數(shù)的的變化影響系統(tǒng)的變化,同時存在隨機變化。

然而無論是分類、聚類還是關(guān)聯(lián)規(guī)則挖掘,都需要解決時間序列的相似度問題,相似性搜索是時間序列數(shù)據(jù)挖掘的研究基礎(chǔ)。由于時間序列存在各種復(fù)雜變形(如平移、伸縮、間斷等) ,且變形時間和變形程度都無法預(yù)料,傳統(tǒng)的歐氏距離已經(jīng)無法勝任。經(jīng)過調(diào)研得知,目前動態(tài)時間彎曲(DTW) 相似距離的穩(wěn)定性已在國內(nèi)外得到驗證,于是我們打算采用DTW來嘗試聚類分類。

五、歐式距離

我們定義兩個時間序列長度為N的序列T和D的歐式距離如下:

歐式距離本身也是計算空間距離的,我們剛開始選用它來計算距離,但發(fā)現(xiàn)單獨使用準確性不高?,F(xiàn)在,我們來做一個簡單的實驗:

圖1 三條序列曲線

首先,用Python來簡單的畫三條曲線(如圖1),從圖中可以明顯的看出,ss1和ss2曲線是很相似(這里就是sin函數(shù)的不同區(qū)間變換),ss3和他們兩個都有明顯的不同。我們使用公式來計算ss1和ss2,ss1和ss3的距離,結(jié)果如下:

ss1 --> ss2 的歐式距離:26.959216038

ss1 --> ss3 的歐式距離:23.1892491903

從上面可以直觀的發(fā)現(xiàn)ss1和ss2的距離值反而更大。這里只是直觀的說明它本身對序列計算的問題,其實當(dāng)發(fā)現(xiàn)時間序列的頻率變化;時間扭曲的時候,單一的歐式距離公式的偏差是比較大的。

六、動態(tài)時間規(guī)整(Dynamic Time Warping)

動態(tài)時間規(guī)整現(xiàn)在應(yīng)用的比較多的是在語音識別上,因為DTW本身是為了找到最優(yōu)非線性時間序列之間的距離值。這個算法是基于動態(tài)規(guī)劃(DP)的思想,解決了發(fā)音長短不一的模板匹配問題,簡單來說,就是通過構(gòu)建一個鄰接矩陣,尋找最短路徑和的犯法?,F(xiàn)在我們繼續(xù)試驗,定義兩個時間序列長度為n的序列T和D。

我們需要先構(gòu)建一個n x n的矩陣,其中i,j是和之間的歐式距離,我們想通過這個矩陣的最小累積距離的路徑。然后確定對比兩個時間序列之間的距離。我們叫這個路徑為W。

其中每個元素代表了T和D點之間的距離,例如:

我們想找到距離最小的路徑:

最佳路徑是使用的動態(tài)規(guī)劃遞歸函數(shù),具體公式如下:

最后得到結(jié)果:

ss1 --> ss2 的DTW距離:17.9297184686

ss1 --> ss3 的DTW距離:21.5494948244

七、聚類

從實驗后,我們最后選用了DTW作為時間序列的計算的方法。但在實際運行過程中,發(fā)現(xiàn)DTW的的運算速度確實比較慢,目前正在實驗提升它效率的方法。有了計算方法后,我們準備開始進行聚類了。我們使用k近鄰分類算法。根據(jù)經(jīng)驗,最理想的結(jié)果是當(dāng)然是k = 1時的距離值。在該算法中,訓(xùn)練集和測試集分別采用的時間序列的周期集合數(shù)據(jù)集,在算法中,對測試集進行預(yù)測的每個時間序列,搜索是必須通過訓(xùn)練中的所有的點集,發(fā)現(xiàn)最相似的一點。

八、小結(jié)

本文只是簡單介紹了在實際項目中使用時間序列聚類算法時產(chǎn)生的疑惑和解決思路,期間很多方法可能還是嘗試和實驗階段。由于時間的原因,可能還有很多細節(jié)方面考慮不是很周到,DTW算法比較可靠

數(shù)據(jù)分析咨詢請掃描二維碼

若不方便掃碼,搜微信號:CDAshujufenxi

數(shù)據(jù)分析師資訊
更多

OK
客服在線
立即咨詢
客服在線
立即咨詢
') } function initGt() { var handler = function (captchaObj) { captchaObj.appendTo('#captcha'); captchaObj.onReady(function () { $("#wait").hide(); }).onSuccess(function(){ $('.getcheckcode').removeClass('dis'); $('.getcheckcode').trigger('click'); }); window.captchaObj = captchaObj; }; $('#captcha').show(); $.ajax({ url: "/login/gtstart?t=" + (new Date()).getTime(), // 加隨機數(shù)防止緩存 type: "get", dataType: "json", success: function (data) { $('#text').hide(); $('#wait').show(); // 調(diào)用 initGeetest 進行初始化 // 參數(shù)1:配置參數(shù) // 參數(shù)2:回調(diào),回調(diào)的第一個參數(shù)驗證碼對象,之后可以使用它調(diào)用相應(yīng)的接口 initGeetest({ // 以下 4 個配置參數(shù)為必須,不能缺少 gt: data.gt, challenge: data.challenge, offline: !data.success, // 表示用戶后臺檢測極驗服務(wù)器是否宕機 new_captcha: data.new_captcha, // 用于宕機時表示是新驗證碼的宕機 product: "float", // 產(chǎn)品形式,包括:float,popup width: "280px", https: true // 更多配置參數(shù)說明請參見:http://docs.geetest.com/install/client/web-front/ }, handler); } }); } function codeCutdown() { if(_wait == 0){ //倒計時完成 $(".getcheckcode").removeClass('dis').html("重新獲取"); }else{ $(".getcheckcode").addClass('dis').html("重新獲取("+_wait+"s)"); _wait--; setTimeout(function () { codeCutdown(); },1000); } } function inputValidate(ele,telInput) { var oInput = ele; var inputVal = oInput.val(); var oType = ele.attr('data-type'); var oEtag = $('#etag').val(); var oErr = oInput.closest('.form_box').next('.err_txt'); var empTxt = '請輸入'+oInput.attr('placeholder')+'!'; var errTxt = '請輸入正確的'+oInput.attr('placeholder')+'!'; var pattern; if(inputVal==""){ if(!telInput){ errFun(oErr,empTxt); } return false; }else { switch (oType){ case 'login_mobile': pattern = /^1[3456789]\d{9}$/; if(inputVal.length==11) { $.ajax({ url: '/login/checkmobile', type: "post", dataType: "json", data: { mobile: inputVal, etag: oEtag, page_ur: window.location.href, page_referer: document.referrer }, success: function (data) { } }); } break; case 'login_yzm': pattern = /^\d{6}$/; break; } if(oType=='login_mobile'){ } if(!!validateFun(pattern,inputVal)){ errFun(oErr,'') if(telInput){ $('.getcheckcode').removeClass('dis'); } }else { if(!telInput) { errFun(oErr, errTxt); }else { $('.getcheckcode').addClass('dis'); } return false; } } return true; } function errFun(obj,msg) { obj.html(msg); if(msg==''){ $('.login_submit').removeClass('dis'); }else { $('.login_submit').addClass('dis'); } } function validateFun(pat,val) { return pat.test(val); }