1. 參考程式

head(faithful)          # load data and      
  eruptions waiting
1     3.600      79
2     1.800      54
3     3.333      74
4     2.283      62
5     4.533      85
6     2.883      55
D = faithful$eruptions  # copy it to a short name
##### 先畫一個圖框 
par(cex=0.7)
plot(0,0,xlim=c(1.5,5.25),ylim=c(0,1.1),xlab="噴發時間(分鐘)", 
     ylab="密度 or (累計)機率", main="分布、機率與密度")
abline(h=1, col='lightgray', lwd=0.25, lty=2)


##### 數值標記 
# Empirical Rug PDF, 實證(數值標記)機率密度函數
rug(D)
# Empirical CDF, 實證(數值標記)累計機率密度函數
plot(ecdf(D), cex=0, verticals=T, lwd=2, col='darkgray', add=T)


##### Histogram PDF 直方圖機率密度函數 
Bins = 20                               # no. bins
bx = seq(min(D), max(D), length=Bins+1) # break sequence 
hist(D, col="#B3FFFF7F", border="white", 
     freq=F, breaks=bx, add=T)
abline(h=0, col='lightgray', lwd=0.25)
# Histogram CDF
adj = (bx[2] - bx[1])/2
steps = stepfun(bx-adj, c(0, sapply(bx, function(b) mean(D <= b))))
plot(steps, cex=0, col='#33CC337F', lwd=3, lty=1, add=T)


##### Smooth PDF 平滑機率密度函數 
Adjust = 0.5                       # set bandwidth
DEN = density(D, adjust = Adjust)  # create density function
lines(DEN, col='gold', lwd=3)      

# Smooth CDF 畫出累計機率密度函數  
PDF = approxfun(DEN$x, DEN$y, yleft=0, yright=0)
x = seq(1,6,0.1)
y = sapply(x, function(i) integrate(PDF, -Inf, i)$value)
lines(x, y, col='red', lwd=3, lty=2)

##### 標示範圍[x1, x2] 
x1 = 3.8; x2 = 4.8
# rect(x1,-0.1,x2,1.2,col= rgb(0,1,0,alpha=0.2),border=NA)
x = seq(x1, x2, length=100)
polygon(c(x, x2, x1),  c(PDF(x), 0, 0), col="#FF99003F", border=NA)

使用PDF估計機率

# Calculate Probability 算出範圍[x1, x2]的機率
(integrate(PDF, x1, x2)$value)
[1] 0.4751



2. 策略規劃

CASE-01

假如你是黃石公園的旅遊直昇機公司,你的業務需要預估老忠實下一次的噴發時間,假如現在的商業情境是:你可以花30元選定一個連續60秒的時段,如果老忠實下一次的噴發時間落在你指定的區間,你就可以贏到100元;請你使用頻寬為0.5的平滑密度模型 …

  • 決定要不要參加這個賽局
  • 如果你參加的話,你要把噴發時間設定在哪一個區間呢?
  • 設在這個區間的話,你參加這個賽局的淨期望報償是?
pacman::p_load(dplyr, ggplot2)
x1 = seq(0,5,0.1)
p = sapply(x1, function(x) (integrate(PDF, x, x+1)$value))
data.frame(start=x1, stop=1+x1, p) %>% top_n(1, p)
  start stop      p
1   3.9  4.9 0.4762



CASE-02

假如商業情境變成:從零開始把每10秒鐘設為一個區間,每個區間的賭金是五塊錢 …

  • 你要怎麼押注,才能獲得最高的期望報償呢?
  • 你的投資金額和期望報償各是多少?
x = seq(1,6,1/6)
cx = sapply(x, function(i) integrate(PDF, -Inf, i)$value)
df = data.frame(
  start = x - 1/6, stop = x, 
  prob=cx -lag(cx) 
  ) %>% 
  mutate(payoff = 100*prob - 5) 
bets = df %>% filter(payoff > 0) %>% arrange(desc(payoff))
bets
  start  stop    prob payoff
1 4.333 4.500 0.09568 4.5682
2 4.500 4.667 0.08930 3.9304
3 4.167 4.333 0.08924 3.9242
4 1.833 2.000 0.08222 3.2215
5 4.000 4.167 0.07646 2.6455
6 2.000 2.167 0.06961 1.9608
7 4.667 4.833 0.06838 1.8376
8 1.667 1.833 0.06362 1.3622
9 3.833 4.000 0.05830 0.8299
sum(bets$payoff)
[1] 24.28
nrow(bets)
[1] 9
sum(bets$payoff)
[1] 24.28



CASE 03

將期望報償和投資金額的比值稱為「期望投資報酬率」 …

  • 「最大期望投資報酬率」和「最大期望報酬」的投資策略是一樣的嗎?
  • 你認為哪一個策略目標比較好呢? 為什麼?
df = df %>% arrange(desc(payoff)) %>% mutate(
  n_bets = row_number(),
  c_invest = n_bets * 5,
  c_payoff = cumsum(payoff),
  c_ROI = c_payoff/c_invest
  ) %>% round(3)
head(df,20) %>% round(3)
   start  stop  prob payoff n_bets c_invest c_payoff  c_ROI
1  4.333 4.500 0.096  4.568      1        5    4.568  0.914
2  4.500 4.667 0.089  3.930      2       10    8.499  0.850
3  4.167 4.333 0.089  3.924      3       15   12.423  0.828
4  1.833 2.000 0.082  3.222      4       20   15.644  0.782
5  4.000 4.167 0.076  2.646      5       25   18.290  0.732
6  2.000 2.167 0.070  1.961      6       30   20.251  0.675
7  4.667 4.833 0.068  1.838      7       35   22.088  0.631
8  1.667 1.833 0.064  1.362      8       40   23.450  0.586
9  3.833 4.000 0.058  0.830      9       45   24.280  0.540
10 2.167 2.333 0.049 -0.100     10       50   24.180  0.484
11 4.833 5.000 0.041 -0.874     11       55   23.306  0.424
12 3.667 3.833 0.040 -1.010     12       60   22.296  0.372
13 2.333 2.500 0.030 -2.047     13       65   20.249  0.312
14 3.500 3.667 0.027 -2.293     14       70   17.957  0.257
15 1.500 1.667 0.027 -2.306     15       75   15.651  0.209
16 3.333 3.500 0.018 -3.185     16       80   12.466  0.156
17 5.000 5.167 0.018 -3.197     17       85    9.269  0.109
18 2.500 2.667 0.014 -3.559     18       90    5.710  0.063
19 3.167 3.333 0.010 -3.974     19       95    1.736  0.018
20 2.667 2.833 0.008 -4.214     20      100   -2.478 -0.025
ggplot(df[1:20,], aes(c_ROI, c_payoff, color=c_invest)) + 
  geom_point(size=3) + 
  geom_text(aes(label=n_bets), color='black', nudge_y=0.6, size=2.5) +
  scale_color_gradientn(colors=c('seagreen','gold','gold','orange','tomato','red')) +
  labs(title="策略空間",color="累計投資金額",y="累計淨預期報償",x="預期投報率")


🗿 策略空間:
  ■ 如何畫策略空間? 策略空間的主要功能是?
  ■ 何謂效率前緣? 何謂合理策略

🗿 策略限制與權衡:
  ■ 如果沒有其它的投資機會,也沒有資金的限制,最佳的策略應該是?
  ■ 如果你的資金上限是c_invest < 40呢?
  ■ 如果你有另外一個ROI = 62.5%的投資機會呢?


🍭 學習重點:
■ 資料分析的基礎:資料、統計量、圖形、模型
■ 建立模型的步驟:模型形式、複雜度參數
■ 模型是一種幫助我們在不確定下做決策的工具,有模型才能做量化的預測和估計
■ 但是,預測並不等於決策,模型做完,商業分析才剛開始而已
■ 商業分析的步驟:
    ◇ 資料、模型
    ◇ 條件、預測、模擬、策略目標
    ◇ 策略目標視覺化、溝通、決策
■ R語言可以串聯上述步驟,用資料裝配線來進行商業分析
■ 決策是一個溝通的過程,視覺化提供一個溝通的基礎
■ 策略空間:
    ◇ 策略、績效指標
    ◇ 效率前緣、合理策略
    ◇ 策略限制、策略權衡