FORECAST 跟 TREND 只給你預測值,想知道「每升高 1 度,多賣幾杯」「這條線到底準不準」,要請出 LINEST。它一次回傳一整個陣列,斜率、截距、R² 都在裡面,問題是這個陣列的排列順序有點反直覺,今天主要就是來講怎麼讀它。同一家族還有處理指數成長的 LOGEST 跟 GROWTH。
TREND、FORECAST、SLOPE、INTERCEPT 在 預測函式整理 已經講過,這篇不重複。我自己預測時九成用 FORECAST.LINEAR 和 TREND,只有想看迴歸的細節或同時放多個 x 的時候才打開 LINEST。
怎麼選
| 想要 | 用這個 | 假設的模型 | 回傳什麼 |
|---|---|---|---|
| 直線的斜率、截距、統計值 | LINEST | y = m × x + b | 一列,或 5 列 |
| 指數曲線的成長倍率、起點 | LOGEST | y = b × m^x | 一列,或 5 列 |
| 指數曲線的預測值 | GROWTH | y = b × m^x | 跟新 x 同樣多個值 |
| 直線的預測值 | TREND、FORECAST | y = m × x + b | 預測函式整理 |
LINEST 對應 TREND,LOGEST 對應 GROWTH:LINEST、LOGEST 給你係數,TREND、GROWTH 直接給你預測值。
範例資料:氣溫與杯數
十天的資料,A 欄是中午氣溫(°C),B 欄是否為週末(1 是、0 否),C 欄是賣出杯數,A1:C1 是標題,資料在 A2:C11:
| A | B | C | |
|---|---|---|---|
| 1 | 氣溫 | 週末 | 杯數 |
| 2 | 22 | 0 | 58 |
| 3 | 24 | 0 | 63 |
| 4 | 25 | 1 | 81 |
| 5 | 27 | 0 | 72 |
| 6 | 28 | 0 | 79 |
| 7 | 30 | 1 | 102 |
| 8 | 31 | 0 | 88 |
| 9 | 33 | 1 | 110 |
| 10 | 34 | 0 | 96 |
| 11 | 36 | 1 | 126 |
手算最小平方法的直線,要先算四個總和:氣溫總和 290、杯數總和 875、氣溫乘杯數的總和 26187、氣溫平方的總和 8600,筆數 n = 10:
- 斜率 = (10 × 26187 − 290 × 875) ÷ (10 × 8600 − 290²) = 8120 ÷ 1900 ≈ 4.2737
- 截距 = (875 − 4.2737 × 290) ÷ 10 ≈ −36.4368
每升高 1 度大約多賣 4.27 杯。後面看 LINEST 的結果能不能對上。
直線迴歸
LINEST
用最小平方法配出直線,回傳斜率、截距,還可以多回傳一整組統計值。
語法:
- 已知 y:要預測的那一欄,這裡是杯數。
- 已知 x:選填,影響 y 的欄位,可以是多欄。省略的話,x 會當成 1、2、3⋯⋯。
- 有截距:選填,預設 TRUE,由資料算出截距。填 FALSE 的話截距強制為 0,直線通過原點。
- 詳細統計:選填,預設 FALSE 只回傳係數那一列,填 TRUE 多回傳 4 列統計值。
先用最單純的一個 x。為了讓位數好讀,我用 ROUND 四捨五入,再包 ARRAYFORMULA,讓整個陣列都能展開。ROUND 不會自己把陣列展開,若只用 ROUND(LINEST(...),4),只會回左上角第一格:
氣溫對杯數的直線迴歸,四捨五入到小數第四位
=ARRAYFORMULA(ROUND(LINEST(C2:C11, A2:A11), 4))結果會從這格往右溢出兩格:
| E | F | |
|---|---|---|
| 1 | 4.2737 | -36.4368 |
斜率在前、截距在後,跟手算的 4.2737 和 −36.4368 一樣。這個順序要記起來,因為很多人以為先截距再斜率。
只想要其中一個值,用 INDEX 挑:
只取截距,也就是第 1 列第 2 欄
=ROUND(INDEX(LINEST(C2:C11, A2:A11), 1, 2), 4)得到 −36.4368。要預測 38 度時賣幾杯,可以把係數跟 {38, 1} 對位相乘再加總,也就是斜率乘 38 加上截距乘 1:
預測 38 度的杯數
=ROUND(SUMPRODUCT(LINEST(C2:C11, A2:A11), {38, 1}), 2)手算 4.2737 × 38 − 36.4368 ≈ 125.96,函式也會是 125.96。如果只是要預測值,直接用 TREND 比較省事。
多個 x 的排列
週末也影響杯數,把 A、B 兩欄一起當成 x:
氣溫與週末兩個 x 對杯數的迴歸
=ARRAYFORMULA(ROUND(LINEST(C2:C11, A2:B11), 4))結果一列三格:
| E | F | G | |
|---|---|---|---|
| 1 | 16.8724 | 3.5633 | -22.5837 |
這就是容易看錯的地方:x 有兩欄,係數的順序是反過來的。最後一欄(週末)的係數排在最前面,第一欄(氣溫)排在它後面,截距永遠排最後。所以 16.8724 是週末的係數,3.5633 才是氣溫的。白話一點:同樣氣溫下,週末比平日多賣約 17 杯;同樣是平日,每升高 1 度多賣約 3.56 杯。
讀取係數時,記得對照原本 x 的欄位。
預測 35 度的週末,把係數依序對上 {1, 35, 1}(週末、氣溫、截距):
預測 35 度週末的杯數
=ROUND(SUMPRODUCT(LINEST(C2:C11, A2:B11), {1, 35, 1}), 2)結果是 119。同樣 35 度的平日,把第一個 1 換成 0,是 102.13。
詳細統計:5 列
第四個參數填 TRUE,就會從 1 列變成 5 列:
一個 x 的詳細統計
=ARRAYFORMULA(ROUND(LINEST(C2:C11, A2:A11, TRUE, TRUE), 4))結果是 5 列 2 欄:
| 列\欄 | E | F |
|---|---|---|
| 1 | 4.2737 | -36.4368 |
| 2 | 0.6419 | 18.8238 |
| 3 | 0.8471 | 8.8478 |
| 4 | 44.329 | 8 |
| 5 | 3470.2316 | 626.2684 |
每一列的意思:
- 第 1 列:係數,斜率在前、截距在後。
- 第 2 列:係數的標準誤差,斜率的 0.6419、截距的 18.8238。標準誤差相對係數愈小,係數愈穩定。
- 第 3 列:左邊是 R²(0.8471,表示杯數的變化有約 85% 可以用氣溫解釋),右邊是 y 估計值的標準誤差 8.8478。
- 第 4 列:左邊是 F 統計量 44.329,右邊是自由度 8(10 筆資料減 2 個係數)。
- 第 5 列:左邊是迴歸平方和 3470.2316,右邊是殘差平方和 626.2684。
R² 也可以只單獨取:,一樣是 0.8471。
x 多於一欄時,統計列的欄數跟著變多,用氣溫與週末兩個 x 算:
兩個 x 的詳細統計
=ARRAYFORMULA(ROUND(LINEST(C2:C11, A2:B11, TRUE, TRUE), 4))| 列\欄 | E | F | G |
|---|---|---|---|
| 1 | 16.8724 | 3.5633 | -22.5837 |
| 2 | 1.6418 | 0.1845 | 5.1952 |
| 3 | 0.9905 | 2.3583 | #N/A |
| 4 | 364.7995 | 7 | #N/A |
| 5 | 4057.5704 | 38.9296 | #N/A |
第 3 到 5 列只有前兩格有意義,第三欄的補位格會是 #N/A。R² 從只看氣溫的 0.8471 提高到 0.9905,加上週末這個欄位確實有幫助。
最後一個參數:有截距填 FALSE,直線被迫通過原點。
強制截距為 0
=ARRAYFORMULA(ROUND(LINEST(C2:C11, A2:A11, FALSE), 4))結果是 3.045 和 0,也就是 y = 3.045 × x。截距那格是 0,不是空白。氣溫 0 度賣 0 杯本來就沒意義,所以這個資料不適合強迫通過原點。
指數迴歸
資料如果是每期乘上差不多的倍數,例如追蹤人數、病毒擴散,直線就配不好,改用指數曲線 y = b × m^x,LOGEST 跟 GROWTH 就是為此準備的。
資料是某個帳號前六週的追蹤人數,A 欄週次、B 欄人數,A1:B1 是標題,資料在 A2:B7:
| A | B | |
|---|---|---|
| 1 | 週次 | 追蹤人數 |
| 2 | 1 | 120 |
| 3 | 2 | 150 |
| 4 | 3 | 185 |
| 5 | 4 | 235 |
| 6 | 5 | 290 |
| 7 | 6 | 365 |
每週大約是前一週的 1.25 倍:150 ÷ 120 = 1.25、185 ÷ 150 ≈ 1.23、235 ÷ 185 ≈ 1.27。
LOGEST
配出指數曲線,回傳成長倍率 m 與起點 b。
語法:
- 參數的意思跟
LINEST一樣,第三個參數填 FALSE 的話 b 固定為 1。 - 回傳順序也一樣:m 在前、b 在後,有多個 x 時 m 同樣是反向排列。
追蹤人數的指數迴歸,四捨五入到小數第四位
=ARRAYFORMULA(ROUND(LOGEST(B2:B7, A2:A7), 4))| E | F | |
|---|---|---|
| 1 | 1.2489 | 95.9098 |
m = 1.2489,代表平均每週成長約 24.89%;b = 95.9098 是曲線在第 0 週的值,所以第 1 週的配適值是 95.9098 × 1.2489 ≈ 119.78,跟實際的 120 很接近。
詳細統計一樣是 5 列,我拿其中最常用的 R² 來看:
LOGEST 的 R²,取第 3 列第 1 欄
=ROUND(INDEX(LOGEST(B2:B7, A2:A7, TRUE, TRUE), 3, 1), 4)得到 0.9998。要注意,LOGEST 的標準誤差、平方和這類統計值,是針對 ln(y) 取對數之後的直線算的,不是原本的人數,所以第 2、4、5 列的數字不能直接拿來跟原始人數比較。
GROWTH
用同一條指數曲線,直接算出預測值。
語法:
- 新 x:選填,想預測的 x,可以是一欄多格。省略的話,回傳的是已知 x 對應的配適值。
- 其餘參數跟
LINEST對應。
預測第 7、8 週,新 x 用 SEQUENCE 產生:
預測第 7、8 週的追蹤人數
=ARRAYFORMULA(ROUND(GROWTH(B2:B7, A2:A7, SEQUENCE(2, 1, 7)), 2))| E | |
|---|---|
| 1 | 454.5 |
| 2 | 567.63 |
和手算對得上:95.9098 × 1.2489^7 ≈ 454.5,第 8 週再乘一次 1.2489 約 567.63。
同一批資料用直線預測, 第 7 週只有 393.67,比 454.5 少了六十人。資料明顯是倍數成長的時候,直線會低估,這是指數曲線的用處。反過來,指數曲線一路乘下去會愈翹愈高,預測得太遠就不太可信,我自己最多看到往後兩三期。
回傳陣列的小提醒
- 這三個函式本身會回傳陣列;包上
ROUND的範例要另外加ARRAYFORMULA,才能保留表格中完整的係數、統計或預測值。輸入後按 Enter,並為右側與下方預留空間;溢出範圍有東西擋住,會顯示#REF!。 - 想只留一格,用
INDEX(結果, 列, 欄)取,LINEST的 R² 是第 3 列第 1 欄。 ROUND會改變計算結果的精度。後續還要計算時,可直接保留裸函式的完整精度,再用數字格式調整畫面上的小數位數。
需要的時候回來查一下排列順序,就這樣!
接下來可以
相關文章
查看所有文章預測函式整理:FORECAST、TREND、SLOPE、INTERCEPT 與 CORREL
FORECAST、FORECAST.LINEAR、TREND、SLOPE、INTERCEPT、CORREL 六個線性預測函式的語法與範例,再用同一組營收資料做移動平均、季節指數與回測,看預測準不準。
陣列思維:從一格一格算到一次算一整欄
用全班加 5 分的小例子,看一格一個公式和一個公式整欄展開差在哪,再認識縱向、橫向、二維陣列的形狀,以及展開結果被舊資料擋住時的
平均單價怎麼算才對:AVERAGE.WEIGHTED 加權平均與條件平均的挑法
各門市的平均單價直接用 AVERAGE 會失真,要依杯數加權。整理 AVERAGE.WEIGHTED 的語法與多組參數寫法,並對照 AVERAGEIF、AVERAGEIFS、MAXIFS、MINIFS 什麼時候該換哪一個,附每家門市的加權單價實例。
留言討論
共 0 則留言
