本周App成功上線AppStore命黔、應用寶呜呐、豌豆莢和小米應用商店,項目在某種意義上終于劃上句號悍募。但句號只是對過去經(jīng)歷的一個告別蘑辑,未來的挑戰(zhàn)未必會比從0到1更簡單。做產(chǎn)品好比生孩子坠宴,十月懷胎一朝分娩是自然規(guī)律洋魂,難在后天的精心撫養(yǎng)。最讓我擔心的是睡眠算法喜鼓,目前距離競品還差十萬八千里副砍。作為一個文科生,去研究算法真的是自不量力颠通,但沒人上的時候,只能自己上了膀懈。
一般智能手環(huán)都借鑒體動記錄儀的方式來收集睡眠數(shù)據(jù)顿锰。當人在活動時,手環(huán)里的三軸加速度計就會記錄下超過閾值的動作,人在白天與睡眠時的活動量是天壤之別硼控。利用這差異刘陶,算法就可以算出數(shù)據(jù)量突然變小以及突然變大的時間節(jié)點,也就是入睡與起床時間牢撼。根據(jù)國外研究結果匙隔,體動記錄儀收集數(shù)據(jù)的時間單位一般為1分鐘,1天最多收集1440個單位的睡眠數(shù)據(jù)熏版》自穑坑就坑在這里。由于我們的手環(huán)主打體感游戲撼短,沒有為睡眠數(shù)據(jù)留下存儲空間再膳,硬件團隊只能做到10分鐘,1天最多收集144個單位的睡眠數(shù)據(jù)曲横。與業(yè)界標準相差整整十倍喂柒,開什么玩笑!
但沒有辦法禾嫉,我所遇到的情況可能很多同行也遇到過:有條件要上灾杰,沒有條件創(chuàng)造條件也要上。以10分鐘的時間單位熙参,想要自動得出用戶的入睡與起床時間是不可能了艳吠。我們只好退而求其次,通過算法得出用戶的睡眠時長尊惰。
我們的手環(huán)每10分鐘記錄1次計步數(shù)據(jù)與睡眠數(shù)據(jù)讲竿,1天的總體數(shù)據(jù)為288個。算法首先會對計算周期做一個限定弄屡,排除明顯的非正常睡眠時間题禀,這樣做有2個好處,一是減少計算量膀捷,不用遍歷288個數(shù)據(jù)迈嘹,二是減少計算出現(xiàn)明顯bug的可能性。
限定好計算周期全庸,接下來算法會排除掉用戶未戴手環(huán)的時間段秀仲。由于手環(huán)不能測心率,未戴手環(huán)時間段的判定主要依靠計步與睡眠數(shù)據(jù)壶笼。當計步與睡眠數(shù)據(jù)連續(xù)為0的時間段超過閾值后神僵,我們就將連續(xù)的時間段視為未戴手環(huán)。
好覆劈,通過2個條件做排除后保礼,算法進入真正的睡眠判定階段沛励。算法以遍歷的形式對每個10分鐘的計步與睡眠數(shù)據(jù)做判定。一共3個條件判定睡眠炮障,2個條件分別對計步與睡眠數(shù)據(jù)做數(shù)值上的限定目派,另外1個條件稍微復雜點,需要將當前10分鐘的睡眠數(shù)據(jù)與之前之后的睡眠數(shù)據(jù)相加胁赢,對相加的和做數(shù)值上的限定企蹭。這個條件可以避免單個睡眠數(shù)據(jù)的產(chǎn)生,保證計算結果的連續(xù)性智末,它在很多研究體動記錄儀的英文文獻中出現(xiàn)過谅摄,當然論文里有復雜的系數(shù)與權重,我拿過來做了簡化吹害。
得出睡眠時長螟凭,相當于產(chǎn)生一組睡眠的數(shù)組。算法再對睡眠數(shù)組中的數(shù)據(jù)做遍歷它呀,拿出計步與睡眠都為0的10分鐘做加法螺男,相加之和即為深睡,睡眠減去深睡即為淺睡纵穿。
算法看著確實很low下隧,只能說這是現(xiàn)有資源條件下我作為產(chǎn)品所能盡到的最大努力,雖然一直叫囂著讓公司花錢去買算法谓媒,但心里其實明白淆院,買來的算法未必適合我們的手環(huán),只能通過不斷的實驗句惯、迭代與測試土辩,需要時間。
所幸的一點抢野,經(jīng)過公司內(nèi)部的公測拷淘,這套算法的準確性得到大家的基本認可,不枉朕的一番苦心指孤,哈哈启涯!