我們常聽說的置信區間與置信度到底是什麼?

 2018-03-28 12:00:38.0

機器學習本質上是對條件概率或概率分佈的估計,而這樣的估計到底有多少是置信度?這裏就涉及到統計學裏面的置信區間與置信度,本文簡要介紹了置信區間這一核心概念,它有助於我們從直觀上理解評價估計優劣的度量方法。

本文討論了統計學中的一個基本術語 :置信區間。我們僅以一種非常友好的方式討論一般概念,沒有太多花哨的統計術語,同時還會使用 Python 完成簡單的實現!儘管這個術語是非常基礎的,但我們有時很難完全理解置信區間到底是什麼,爲什麼我們需要它。

假設你想知道美國有多少人熱愛足球。爲了得到 100% 正確的答案,你可以做的唯一一件事是向美國的每一位公民詢問他們是否熱愛足球。根據維基百科,美國有超過 3.25 億的人口。與 3.25 億人談話並不現實,因此我們必須通過問更少的人來得到答案。

我們可以通過在美國隨機抽取一些人(與更少人交談)並獲得熱愛足球的人的百分比來做到這一點,但是我們不能 100% 確信這個數字是正確的,或者這個數字離真正的答案有多遠。所以,我們試圖實現的是獲得一個區間,例如,對這個問題的一個可能的答案是:「我 95% 相信在美國足球愛好者的比例是 58% 至 62%」。這就是置信區間名字的來源,我們有一個區間,並且我們對它此一定的信心。

非常重要的是我們的樣本是隨機的,我們不能只從我們居住的城市中選擇 1000 人,因爲這樣就不能很好地代表整個美國。另一個不好的例子是,我們不能給這 1000 個隨機用戶發 Facebook 消息,這樣我們就會得到美國 Facebook 用戶的喜愛趨勢,因爲並不是所有的美國公民都使用 Facebook。

因此,假設我們隨機抽取了 1000 個美國人的樣本,我們發現,在 1000 人中有 63% 的人喜歡足球,我們能假設(推斷)出整個美國人口的情況嗎?

爲了回答這個問題,我希望我們以一個不同的方式來看待它。假設我們知道(理論上)美國人的確切比例,假設它是 65%,那麼隨機挑選 1000 人只有 63% 的人喜歡足球的機會是多少?讓我們用 Python 來探索這個問題!

love_soccer_prop = 0.65  # Real percentage of people who love soccertotal_population = 325*10**6  # Total population in the U.S. (325M)num_people_love_soccer = int(total_population * love_soccer_prop)num_people_dont_love_soccer = int(total_population * (1 - love_soccer_prop))people_love_soccer = np.ones(num_of_people_who_love_soccer)people_dont_love_soccer = np.zeros(num_people_dont_love_soccer)all_people = np.hstack([people_love_soccer, people_dont_love_soccer])print np.mean(all_people)# Output = 0.65000000000000002

在這段代碼中,我創建了一個表示 3.25 億人的 NumPy 數組,對於每個人,如果他/她喜歡足球,那麼我會存儲 1,否則就是零。我們可以通過計算它的平均值來得到數組中的百分比,實際上它是 65%。

現在,讓我們取幾組容量爲 1000 個樣本的試驗,看看得到的百分比是多少:

for i in range(10):    sample = np.random.choice(all_people, size=1000)    print 'Sample', i, ':', np.mean(sample)# Output:Sample 0 : 0.641Sample 1 : 0.647Sample 2 : 0.661Sample 3 : 0.642Sample 4 : 0.652Sample 5 : 0.647Sample 6 : 0.671Sample 7 : 0.629Sample 8 : 0.648Sample 9 : 0.627

對於每組樣本,我們獲得了不同的值,但直覺(和統計理論)表示,大量樣本的平均值應該非常接近真實百分比。讓我們這樣試試!我們取很多樣本,然後看看會發生什麼:

values = []for i in range(10000):    sample = np.random.choice(all_people, size=1000)    mean = np.mean(sample)    values.append(mean)print np.mean(values)# Output = 0.64982259999999992

我們創建了 10K 個樣本,檢查了每個樣本中熱愛足球的人的百分比,然後取平均值,我們得到了 64.98%,這非常接近於實際值 65%。讓我們畫出我們得到的所有值:

這裏你看到的是我們得到的所有樣本值的直方圖,這個直方圖的一個很好的性質是它和正態分佈非常相似。正如我所說的,我不想在這裏使用太多的統計術語,但假設如果我們這樣做了很多次(無限次),我們將得到一個非常接近正態分佈的直方圖,我們可以知道該分佈的參數。用更簡單的話來說,我們會知道這個直方圖的形狀,所以我們可以精確地知道在任意數值範圍內有多少個樣本。

下面是一個例子,我們會多次運行這個模擬(試圖達到無窮大):

首先,我們可以看到直方圖的中心(平均值)接近 65%,正如我們所預期的,但我們可以通過查看直方圖來得到更多信息,例如,我們可以說,一半樣本都大於 65%,或者我們可以說大約 25% 的樣本大於 67%,甚至可以說(大致)只有 2.5% 的樣本大於 68%。

在這一點上,很多人可能會問兩個重要的問題:「我怎樣才能取得無數的樣本?」和「它對我有什麼幫助?」。

讓我們回到我們的例子,我們抽取了 1000 人的樣本,得到了 63%,我們想知道,隨機抽樣的 1000 人中有 63% 的足球愛好者的概率是多少。使用這個直方圖,我們可以說有(大概)25%的概率,我們會得到一個小於或等於 63% 的值。該理論告訴我們,我們實際上並不需要得到無限的樣本,如果我們隨機選擇 1000 人,只有 63% 的人喜歡足球是可能發生的。

實際上,爲了找到不同數值範圍或區間的概率,我們需要知道或至少估計總體分佈的標準差。因爲我們想把事情變得簡單一點,因此現在先不討論它。

讓我們回到現實和真正的問題,我不知道美國足球愛好者的實際比例,我只抽取了一個樣本,得到了 63%,這對我有什麼幫助?

所以,我們不知道在美國熱愛足球的人的實際比例。我們所知道的是,如果我們從總體分佈取無數個樣本,它將如下所示:

這裏 μ 是總體分佈的平均值(我們例子中足球愛好者的實際百分比),σ 是總體分佈的標準差。

如果我們知道這一點(並且我們知道標準差),我們可以說約 64% 的樣本會落在紅色區域,或者 95% 以上的樣品會落在圖中的綠色區域之外:

如果我們在之前假設的實際百分比 65% 上使用該圖,那麼 95% 以上的樣本將在 62% 和 68% 之間(+ - 3)。

當然,距離是對稱的,所以如果樣本有 95% 落在在實際百分比 -3 和 +3 之間,那麼真實百分比落在樣本百分比 -3 和 +3 之間的概率爲 95%。

如果我們抽取一個樣本,得到了 63%,那麼我們可以說我們 95% 確信實際比例在 60%(63-3)和 66%(63 + 3)之間。

這就是置信區間,區間爲 63 + -3,置信度爲 95%。

我希望大家現在對置信區間有更好的理解,但這個介紹忽略了一些重要的技術性的部分。有很多文章包含了這些部分,因此讀者可繼續閱讀相關的材料加強理解。

原文鏈接:https://towardsdatascience.com/a-very-friendly-introduction-to-confidence-intervals-9add126e714

文章來源:機器之心