simulation of alberta pool prices scott macdonald
TRANSCRIPT
Simulation of Alberta Pool Prices
Scott MacDonald
Outline
• High level observations of Alberta power market since deregulation
– Load growth, Generation, Historical pool prices
• Challenges of simulating prices– What drives price spikes?– Alberta’s merit order
• Description of model• Results
Alberta Marginal Cost ($/MWh)
0
50
100
150
200
250
300
350
0 1000 2000 3000 4000 5000 6000 7000 8000 9000 10000
MW
$/MWh
Wind, Hydro, Biomass
Base Gas
Coal
Peaking Gas,Dispatchable Hydro
Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec5000
5500
6000
6500
7000
7500
8000
8500
9000Peak load growth by month 2000 - 2007
Sys
tem
De
ma
nd
(M
W)
20002001200220032004200520062007
Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec5000
5500
6000
6500
7000
7500
8000
8500
9000Off peak load growth by month 2000 - 2007
Sys
tem
De
ma
nd
(M
W)
20002001200220032004200520062007
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23250
300
350
400
450
500M
W
Hour Ending
SCADA Generation Data for Wind On 10/02/2007
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 2350
100
150
200
250
300
350
MW
Hour Ending
SCADA Generation Data for Hydro On 10/02/2007
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 234300
4400
4500
4600
4700
4800
4900
5000
5100
5200
5300
MW
Hour Ending
SCADA Generation Data for Coal On 10/02/2007
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 231950
2000
2050
2100
2150
2200
2250
2300
2350
MW
Hour Ending
SCADA Generation Data for Gas On 10/02/2007
0 1000 2000 3000 4000 5000 6000 7000 80005000
6000
7000
8000
9000
10000
Time (hours)
Sys
tem
De
ma
nd
(M
W)
Load Duration Curve for 2006
0 1000 2000 3000 4000 5000 6000 7000 80000
200
400
600
800
1000
Time (hours)
Pric
e $
/MW
h
0 1000 2000 3000 4000 5000 6000 7000 80005000
6000
7000
8000
9000
10000
Time (hours)
Sys
tem
De
ma
nd
(M
W)
Load Duration Curve for 2007
0 1000 2000 3000 4000 5000 6000 7000 80000
200
400
600
800
1000
Time (hours)
Pric
e $
/MW
h
Summary of Off Peak Prices2000 2001 2002 2003 2004 2005 2006 2007
Jan $33.69 $111.68 $18.32 $66.04 $42.53 $46.08 $46.08 $43.27Feb $36.20 $93.16 $14.46 $56.98 $43.99 $34.90 $38.76 $59.01Mar $37.49 $73.12 $43.40 $85.43 $34.09 $38.10 $33.74 $37.29Apr $60.11 $85.25 $27.60 $36.71 $37.90 $39.64 $26.37 $29.26May $31.05 $61.85 $21.61 $39.61 $50.64 $31.00 $27.74 $19.83Jun $50.54 $41.34 $14.52 $25.59 $48.34 $33.21 $27.92 $27.44Jul $56.24 $37.22 $14.13 $65.10 $45.66 $28.20 $76.76 $86.89Aug $69.34 $36.91 $19.22 $42.05 $33.90 $63.50 $46.65 $34.83Sep $79.99 $22.74 $27.38 $28.67 $40.10 $34.10 $43.85 $35.49Oct $140.81 $29.74 $28.16 $39.63 $44.37 $95.66 $96.59 $44.47Nov $112.12 $21.68 $43.96 $42.80 $31.33 $83.86 $58.41Dec $142.30 $23.49 $58.59 $35.08 $47.11 $53.92 $49.19
Summary of On Peak Prices2000 2001 2002 2003 2004 2005 2006 2007
Jan $56.53 $145.33 $35.74 $90.97 $66.61 $53.53 $92.66 $73.36Feb $55.12 $134.44 $28.30 $99.42 $50.13 $48.49 $65.56 $84.15Mar $105.87 $114.65 $64.39 $93.24 $48.50 $49.60 $51.54 $70.72Apr $120.45 $138.40 $57.73 $62.57 $62.24 $57.68 $56.02 $69.60May $66.55 $107.47 $54.03 $68.70 $80.13 $63.49 $76.86 $68.97Jun $147.78 $79.85 $71.59 $59.57 $70.44 $71.16 $86.28 $66.25Jul $177.63 $66.29 $35.29 $104.38 $64.42 $45.28 $168.81 $210.02Aug $297.97 $63.54 $41.27 $66.34 $63.00 $106.26 $92.83 $97.29Sep $246.65 $35.69 $60.35 $54.56 $68.20 $103.68 $110.80 $60.12Oct $342.40 $54.20 $56.07 $87.62 $68.49 $142.86 $235.51 $80.54Nov $312.21 $41.80 $87.42 $60.37 $53.49 $154.71 $139.86Dec $225.67 $41.60 $80.57 $51.02 $74.26 $138.50 $87.98
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 310
100
200
300
400
500
600
700
800
900
1000P
rice
$/M
Wh
Time (days)
Example of a low settling month - July 2005Mean: 37.7471 Std: 35.0434
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 310
100
200
300
400
500
600
700
800
900
1000P
rice
$/M
Wh
Time (days)
Example of a high settling month - July 2007Mean: 155.735 Std: 259.7324
1000 2000 3000 4000 5000 6000 7000 80000
100
200
300
400
500
600
700
800
900
1000
Cummulative Supply (MW)
Pric
e $
/MW
h
Merit order for July 12, 2005
Hour Ending 4Hour Ending 8Hour Ending 15Hour Ending 21
7900 7950 8000 8050 8100 8150 8200 8250 8300 8350 84000
20
40
60
80
100
120
Cummulative Supply (MW)
Pric
e $
/MW
h
Merit order for July 12, 2005 (close up)
Hour Ending 15
System Marginal Price
• Pool Price is the time weighted average of the SMP
• Intersection of Alberta Internal Load (AIL) and merit curve determines the price
• SMP remains constant as long as AIL is on the price setting block
• Many factors effect the merit order (Wind, Imports, DCR)
Sample SMP Calculation
PostTime SMP($/MWh)
AIL(MW)
DCR(MW)
BC (MW)
SK(MW)
WIND(MW)
15:48 54.10 8276 512 109 -126 429
Adjusted Load = AIL + SK – WIND – 0.44*DCR
= 7496 MW
7496 MW (intersect with merit curve) implies SMP = 52.80 $/MWh
Description of Price Simulation Model
• Very simple (perhaps too simple?)• Good:
– Reproduces historically “reasonable” CDFs– Stats are inline with history– Spikes happen in the right hour endings (8-23)– Back tests calculate margins with 1 to 1.5 std of mean
• Bad:– Fails to reproduce the large number of $10/MWh hours.
(Coal units marginal price)– Over parameterized?– Assumes that history is likely to repeat itself
Model Process
1. Query historical data from SQL database2. Create shaping matrix3. Create noise vector4. Create price path
Shaping Matrix(for one month)
Mon Tue Wed Thu Fri Sat SunP_1,{1:24} … … … … … …P_2,{1:24} … … … … … …P_3,{1:24} … … … … … …P_4,{1:24} … … … … … …Notation:
P_i,{1:24}
Day OccurrenceHours 1 through 24
Shaping Matrix(aggregate)
Mon Tue Wed Thu Fri Sat SunM(P_{1:4},{1:24},1)
… … … … … …
M(P_{1:4},{1:24},2)
… … … … … …
M(P_{1:4},{1:24},3)
… … … … … …
M(P_{1:4},{1:24},4)
… … … … … …Notation, M = mean()
P_{1:4},{1:24},i
Day OccurrenceHours 1 through 24
Year Label
Mon Tue Wed Thu Fri Sat Sun
HE 4
HE 8
HE 12
HE 16
HE 20
HE 24
Aggregate scalars (normalized to peak of month) for month 1
0.2
0.4
0.6
0.8
1
Mon Tue Wed Thu Fri Sat Sun Mon0
0.2
0.4
0.6
0.8
1
Mon Tue Wed Thu Fri Sat Sun
HE 4
HE 8
HE 12
HE 16
HE 20
HE 24
Aggregate scalars (normalized to peak of month) for month 5
0.2
0.4
0.6
0.8
1
Mon Tue Wed Thu Fri Sat Sun Mon0
0.2
0.4
0.6
0.8
1
Mon Tue Wed Thu Fri Sat Sun
HE 4
HE 8
HE 12
HE 16
HE 20
HE 24
Aggregate scalars (normalized to peak of month) for month 9
0.2
0.4
0.6
0.8
1
Mon Tue Wed Thu Fri Sat Sun Mon0
0.2
0.4
0.6
0.8
1
Mon Tue Wed Thu Fri Sat Sun
HE 4
HE 8
HE 12
HE 16
HE 20
HE 24
Aggregate scalars (normalized to peak of month) for month 7
0.2
0.4
0.6
0.8
1
Mon Tue Wed Thu Fri Sat Sun Mon0
0.2
0.4
0.6
0.8
1
Noise Vector
• Skip the details• Broken out into peak (HE 8-23) and off peak
(everything else)• Remove seasonality by doing
– log(P_i) – mean(log(P_month))
Create Price Path (pseudocode)1. Tmp_(i,j) = Smat(i,j) + X*Smat_std(i,j)
where X ~ a + b*U(0,1) random variable2. Tmp = flatten(Tmp)3. S = S*c
where c is scaling constant4. On_peak_chain = emprand(Nvec_on)5. Off_peak_chain = emprand(Nvec_off)6. IF (HE is peak):
P = log(S) + On_peak_chainElse:
P = log(S) + Off_peak_chain7. P = exp(P) + X
where X ~ a + b*U(0,1) random variable
0 50 100 1500
100
200
300
400
500
600
$ (CAD)
Pro
ba
bili
tyHistogram of mean of price paths. Mean: 84.9754 std: 29.2083
0 20 40 60 80 100 1200
100
200
300
400
500
600
700
$ (CAD)
Pro
ba
bili
tyHistogram of mean of off peak price paths. Mean: 64.0045 std: 26.4742
-20 0 20 40 60 80 100 120 140 160 1800
100
200
300
400
500
600
$ (CAD)
Pro
ba
bili
tyHistogram of mean of peak price paths. Mean: 100.3004 std: 32.3465
Min Max Mean Median Std0
100
200
300
400
500
600
700
800
900
1000Statistics of simulated price paths and historical prices
$ (
CA
D)
Simulated2003200420052006
0 100 200 300 400 500 600 700 800 900 10000
0.1
0.2
0.3
0.4
0.5
0.6
0.7
0.8
0.9
1
x
F(x
)
Empirical CDF
Simulated2003200420052006
Conclusion
• Thin supply stack causes wild price variation• Generators dispatching intelligently
– Scarcity pricing, shadow bidding
• Naïve approach seems to yield reasonable results (back tested over 1 year of data)
• Flexible tool to allow users to assess the risk of various hedge scenarios (7x24, 6x16, etc)