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

熱線電話:13121318867

登錄
首頁精彩閱讀談?wù)剺颖玖窟x擇背后的科學(xué)道理
談?wù)剺颖玖窟x擇背后的科學(xué)道理
2016-06-08
收藏
談?wù)剺颖玖窟x擇背后的科學(xué)道理

總是說XX的樣本量就夠了,可是為什么呢?

如何決定樣本量,是一個老生常談的話題,也有很多相關(guān)文章。然而翻看相關(guān)文章,就會發(fā)現(xiàn)介紹選多少合適的比較多,而介紹為什么這么選就合適的卻比較少。

相信很多用研同學(xué)都聽過這句著名的話:

根據(jù)尼爾森關(guān)于可用性測試的經(jīng)典理論,6-8人便可以找到產(chǎn)品80%以上的可用性問題。

但是……為啥呢?當(dāng)有“無知的”地球人問:為什么6-8人就能發(fā)現(xiàn)80%以上的問題時,難道我們要理直氣壯的說:因?yàn)槭悄釥柹f的么……

在樣本量選擇上似乎有一些“約定俗成”的規(guī)定。比如:可用性測試5-8人,問卷調(diào)研大約200-500份等等……但是,當(dāng)需要和地球人理論時,單單的“約定俗成”卻沒有足夠的說服力。不如讓我們一起來看看這些“約定俗成”背后的科學(xué)道理,讓自己更有底氣。

1. 為什么說可用性測試5-8個人就夠?

俗話說“8個用戶可以發(fā)現(xiàn)80%的問題”。其實(shí)這句話并不完整,完整的說法應(yīng)該是:

8個人可以80%的概率發(fā)現(xiàn)發(fā)生可能性大于18%的問題。

這話太繞了,嘗試用人話解釋一下:如果某個APP中存在一個BUG,100個人用,50個人用都會遇到,那么我們至少有80%的可能性發(fā)現(xiàn)。只要可能遇到的人大于18個(發(fā)生可能性大于18%),我們都至少有80%的可能性發(fā)現(xiàn)。但如果這個BUG只有5個人可會遇到,那么能發(fā)現(xiàn)的概率就要低于80%了。

之所以這么說,背后的原理是這樣一個公式:

1462718458-2316-ur-yangbenliang-01

(P(X≥1)是在n次嘗試中事件至少發(fā)生1次的概率,p是某事件的概率)

前輩們根據(jù)這個公式總結(jié)出了下表:

1462718458-3153-ur-yangbenliang-02

1462718458-7562-ur-yangbenliang-03

資料來源:《用戶體驗(yàn)度量》Jeff Sauro,James R.Lewis著,機(jī)械工業(yè)出版社,P134-135

從表中可以看出,決定樣本量涉及到兩個因素:一個是確定程度,一個是問題發(fā)生的概率。

再來具體看一看我們常說的“8個人”。

當(dāng)選擇8個人進(jìn)行測試時,可以100%發(fā)現(xiàn)發(fā)生概率大于50%的問題,90%的可能性發(fā)現(xiàn)發(fā)生概率大于25%的問題,73%的可能性發(fā)現(xiàn)發(fā)生概率大于15%的問題。

就好像天氣預(yù)報員說:100%的確定明天的降水概率大于50%,90%的確定明天的降水概率大于25%。

等等…這樣的話會不會被質(zhì)疑:8個人只能90%發(fā)現(xiàn)發(fā)生概率大于25%的問題,那發(fā)生概率低于25%的問題怎么辦?就不重要了么?

不如讓我們再來看看尼爾森關(guān)于釣魚的比喻:

假設(shè)你有好多個池塘可以釣魚,一些魚比另一些魚更容易抓到。所以,如果你有10小時,你會花10個小時都在一個池塘里釣魚,還是花5個小時在一個池塘上、花另外的5個小時在另一個池塘上呢? 為使抓到的魚數(shù)量最大化,你應(yīng)該在兩個池塘上都花一些時間,以便從每個池塘里都釣到容易釣的魚。

一次何必找那么多用戶,少做幾個用戶先把發(fā)生率高的問題get了,版本更新以后再繼續(xù)找用戶去get發(fā)生率高的問題,省時省力效果佳。

這樣是不是就可以完整的證明我們可用性測試做5-8個人的觀點(diǎn)了呢。

2. 問卷調(diào)研,樣本量選多少?

在做問卷調(diào)研的時候,如何估計樣本量?眾所周知有一個公式:

1462718458-9571-ur-yangbenliang-04

但是這個公式存在一個問題:我要是連總體方差(CV2)都能知道,還做個毛線調(diào)研。

如果想估算總體方差,需要先選取一批人進(jìn)行測試,得到一個樣本方差,用樣本方差代替總體方差,這在現(xiàn)實(shí)工作中顯然難以實(shí)現(xiàn)。于是為了便于計算,偉大的前輩對公式進(jìn)行了轉(zhuǎn)換:

1462718458-9296-ur-yangbenliang-05

資料來源:《社會研究方法》仇立平著,重慶大學(xué)出版社,P137

作者說這一轉(zhuǎn)換是根據(jù)“推論總體比例或百分比的原理”進(jìn)行的。姑且不去管這個轉(zhuǎn)換原理是什么,這個公式我們可以這樣來理解:當(dāng)p=0.5的時候,總體的差異性最大。因?yàn)閜=0.5表示兩種情況出現(xiàn)的概率是相等的。比如一個群體中男生和女生出現(xiàn)的概率都是0.5,說明男女人數(shù)相等。這種情況下,這個群體的性別差異是最大的。

由于總體差異越大,需要的樣本量就越大。我們面對任何總體的時候,都可以假設(shè)“這是一個差異性最大的總體”,來計算我們所需要的樣本量。因此,把p=0.5代入,就簡化出了一個可以供我們輕松計算樣本量的公式。

如果想看到總體不同差異所對應(yīng)的樣本量,前人還總結(jié)了這樣一個表:

1462718460-6578-ur-yangbenliang-06

資料來源:《社會研究方法》仇立平著,重慶大學(xué)出版社,P137

因此假設(shè)總體差異性最大的情況下,在習(xí)慣使用的5%誤差檔,300多的樣本也就可以了。

當(dāng)然,在具體使用過程中,并不用查表那么麻煩。有一個著名的計算樣本量的網(wǎng)站,直接去算就OK了。

1462718460-8185-ur-yangbenliang-07

http://www.surveysystem.com/sscalc.htm

3.用戶量越大,需調(diào)研人數(shù)越多?

首先,總體規(guī)模會對樣本量有影響。當(dāng)總體規(guī)模比較小的時候,對樣本量影響較大。但是當(dāng)總體規(guī)模達(dá)到一定程度以后,對樣本量增加的需求是較小的。

我們往往調(diào)查所涉及到的總體不是無限總體,產(chǎn)品的用戶人數(shù)都是一個有限的數(shù)量。因此在計算所需樣本量的時候,為了更精確可以加入變量“總體規(guī)模”,公式大概長成這個樣子:

1462718459-1780-ur-yangbenliang-08

然而這不是重點(diǎn),重點(diǎn)是通過這個公式可以計算出,不同總體規(guī)模所需要的樣本量大致如下:

1462718459-5345-ur-yangbenliang-09

由此可以看出,當(dāng)總體規(guī)模在1萬以下時,隨著總體規(guī)模上升,所需樣本量增加比較大。但是當(dāng)總體規(guī)模在1萬以上時,規(guī)模再變大,所需樣本人數(shù)的增長變得緩慢。

為了得到更準(zhǔn)確的答案,我們不妨用計算樣本量的網(wǎng)址自己來算一下。假設(shè)置信區(qū)間為±3個標(biāo)準(zhǔn)差。計算結(jié)果如下:

1462718460-7055-ur-yangbenliang-10

如果再有人說:我們是億級的產(chǎn)品,1000人怎么能代表我們的用戶?

就可以理直氣壯的告訴他:

總體規(guī)模10萬以上和10萬所需要的樣本量并沒有什么區(qū)別呢。

樣本量選多少合適,對于調(diào)研本身而言或許不是個問題。但是當(dāng)我們想推動調(diào)研結(jié)果的時候,樣本量卻很容易遭到對方質(zhì)疑。可能是幾百個人的答案看起來容易讓人覺得不靠譜,也可能因?yàn)闃颖玖渴亲钊菀踪|(zhì)疑的一個因素……

無論如何,多了解一些背后的原因,讓自己更有底氣,或許才能更好地說服別人。

數(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(), // 加隨機(jī)數(shù)防止緩存 type: "get", dataType: "json", success: function (data) { $('#text').hide(); $('#wait').show(); // 調(diào)用 initGeetest 進(jìn)行初始化 // 參數(shù)1:配置參數(shù) // 參數(shù)2:回調(diào),回調(diào)的第一個參數(shù)驗(yàn)證碼對象,之后可以使用它調(diào)用相應(yīng)的接口 initGeetest({ // 以下 4 個配置參數(shù)為必須,不能缺少 gt: data.gt, challenge: data.challenge, offline: !data.success, // 表示用戶后臺檢測極驗(yàn)服務(wù)器是否宕機(jī) new_captcha: data.new_captcha, // 用于宕機(jī)時表示是新驗(yàn)證碼的宕機(jī) 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); }