2013年4月8日 星期一

你網站有在成長嗎? 最困難的數學題.....

有時, 最簡單的問題往往是最困難的問題, .....

這幾個月我遇到數學系的教授或畢業的朋友, 我就一直問他一個問題:

若我們知道一個時間序列, 知道它是有週期性的, 但除外, 往往會遇到一些變異突然變高與變低, 能找到一個系統去排除這種不是誤差數字, 找到這時間序列的真正走向嗎?

上面這樣說聽起來很玄, 事實上就是若我們知道一個網站的訪客狀況, 而我們知道這對象本來就有依每週的週期變化, 但往往遇到活動就或暴量, 遇到機器問題就或掛掉, 在不知道這些事情的情型下, 卻又能夠排除這個巨量 "誤差", 找到這網站是否真的有在成長或是在衰退?

因此要知道網站有沒有在成長的計算, 不是單純的比較兩個週期的數字變化那麼簡單, 要符合下面四個問題或要求:

1. 要解決週期變化
2. 要解決巨量誤差
3. 要能夠很敏感的知道最近的改變
4. 要能夠很穩定的不要有錯誤警報

當然還有一個更重要的問題: 學習區間要越短, 收斂要很快, .......

這下子就很麻煩的, 甚至在某些觀點, 上面的要求是 "互斥" 的, 當然不是這意思, 而是說要同時滿足是相當困難的.

而我在三個月信誓旦旦的寫出一篇, 網事, 網站的成長與燈號, 裏面有說到我用三個方法解決掉這個問題:

1. 移動平均: 消瀰掉週期產生的變動差異.
2. 過濾離峰值: 也就是 Data Cleaning, 去掉一些事件產生的離峰值.
3. 迴歸分析: 算出最接近的成長斜率.


但當我寫完之後, 我就開始後悔了, 因為這方法, 距離真正要解決最上面的四個問題還有段距離, 因此這三個月我就懸滯在這邊了, 雖然主要因為是過年的關係, 但這個問題我一直放在心上想辦法解決.

的確我也說: 畢竟這個數值是種猜測, 是永遠猜不準的, 即使猜得很準有時意義也沒這麼高, 對經營者而言, 就是希望網站一直成長, 成長越多越好, 但是若是讓他知道, 除了活動與機器掛掉外, 還有甚麼 "基本功" 做對或做錯, 而讓網站成長或衰退, 而從過去看現在, 從現在決定未來該怎麼走, 這件事也是挺重要的, 若能夠算得更準也是好事.

而在兩個星期在跟某教授聊完天後, 我就在想說還有甚麼解法是我沒想到的, 而我那時想的是傅立葉
的計算方式, 來去看週期走向, 但在想, 事實上我們很清楚人的行為就是每週的週期是最強的, 扣掉這個不是月, 就是季與年, 但我們在做經營決策若是用這種週期就太糟糕了, 應該是跟據每天最新的數字去行動才對.

因此我就想說, 做個最基本的微分差來看變化, 當時一直覺得我們看微分的變化通常不是指趨向, 而是趨向的改變, 而我當時想到若是我放棄移動平均, 而是用週期的變化平均, 說不定是有解的, 不只是移動平均是不須要的, 甚至是迴歸更不須要.

我在那時才發現我一直被既有的算式給綁住, 這問題說不定就如同最基本的答案, 只要看最基礎的成長狀況, 只是不一樣的是不能看整個區間, 而是要每天每天去看, 然後再來去算 "平均".

因此最後的演算法是:

1. 算出每天跟上週同期的變化 (消瀰週期性)
2. 過濾離峰值 (這跟之前是一樣)
3. 用半衰期的方式去求平均

而為甚麼用半衰期的方式去求平均, 這是我在前年做 "神貘天氣" 時想很久的方法, 也就是我們知道越近的資料越準確, 而我們如何去用一連串的預測來去求平均, 此時我就覺得幸好當時有做這專案, 不然遇到這問題我還真不知道如何解決, 此時, 這四個問題就真的有解了.

的確, 這個數學題很難, 但事實上是看起來很難罷了, 因為某些茫點讓我們限制了一些思考以及方向,有時用最簡單的方式就可以解決, 因此最後還是用很簡單的數學, 連迴歸都沒用到, 只是做基本的差分, 甚至我原本想要套用一個 "當高次方程式參數比低次很小的時候可以忽略", 但後來想想還是直接做掉好了, 最後終於讓我放下我一直覺得不夠好的大石頭.

在上個星期我在一場 iSearch 的演講說到網事, 裏面有幾張投影片可以給大家分享, 從這邊大概就可以知道網事是在解決甚麼問題了, 只是解決的夠不夠好罷了....

沒有留言:

張貼留言

熱門文章