Asset-Liability Management · บทย่อย 1
เงินลงทุนกับเป้าหมายที่ต้องจ่าย
มีเงินลงทุน 500,000 บาท จะพอจ่าย 120,000 บาทในอีกสองปี 180,000 บาทในอีกสี่ปี และ 300,000 บาทในอีกหกปีหรือไม่?
การตอบต้องดูทั้งเงินที่มี วันจ่าย และวิธีลงทุนระหว่างรอ เราจะเริ่มจากตารางเงินสามรายการ แล้วคำนวณว่าต้องเตรียมเงินวันนี้เท่าไร ก่อนแยกพอร์ตสำหรับรองรับเป้าหมายออกจากพอร์ตที่ต้องรับความเสี่ยงเพื่อหาโอกาสเติบโต
บทนี้ต่อจากการวัดผลตอบแทนและการจัดพอร์ต โดยอ้างอิงหัวข้อการจัดการสินทรัพย์และภาระผูกพันของคอร์ส EDHEC/Coursera และ Lab 124 ตัวเลขทั้งหมดเป็นตัวอย่างสมมติ หน่วยเป็นบาท ไม่มีภาษี ค่าธรรมเนียม หรือเงินฝากถอนนอกเหนือจากที่ระบุ โค้ดรันได้ใน Notebook ใหม่โดยเรียงจากบนลงล่าง ใช้เพียง NumPy และ pandas ที่ติดตั้งแล้ว
ดาวน์โหลด Notebook ของบทนี้ เพื่อรันตัวอย่างตามลำดับและเทียบผลลัพธ์ที่บันทึกไว้
เขียนเป้าหมายให้เป็นกระแสเงินสด
Asset คือสินทรัพย์ที่เรามี เช่น เงินฝาก หุ้น หรือพันธบัตร ส่วน liability ในงานบริหารสินทรัพย์และหนี้สินหมายถึงเงินที่ต้องจ่ายในอนาคต อาจเป็นภาระตามสัญญาของกองทุนบำนาญ หรือเป็นเป้าหมายของบุคคล เช่น ค่าเรียนและค่าใช้จ่ายหลังเกษียณ การเรียกเป้าหมายว่า liability ช่วยให้เขียนจำนวนเงินและวันจ่ายลงในแบบจำลองได้ แม้ไม่ได้เป็นหนี้ตามความหมายทางกฎหมาย
เริ่มจากสามรายการดังนี้
| เวลาเมื่อวัดจากวันนี้ | เงินที่ต้องจ่าย | สิ่งที่กำหนดไว้ในตัวอย่าง |
|---|---|---|
| อีก 2 ปี | 120,000 บาท | จำนวนเงิน nominal คงที่ |
| อีก 4 ปี | 180,000 บาท | จำนวนเงิน nominal คงที่ |
| อีก 6 ปี | 300,000 บาท | จำนวนเงิน nominal คงที่ |
| รวม | 600,000 บาท | จ่ายคนละวัน |
Nominal หมายถึงจำนวนบาทในวันที่จ่าย เช่น 120,000 บาทตามที่ตกลงไว้ เราจะพิจารณาเป้าหมายที่ปรับตามเงินเฟ้อภายหลัง ยอดรวม 600,000 บาทบอกจำนวนเงินที่ต้องจ่ายตลอดแผน แต่การเตรียมเงินวันนี้อาจใช้น้อยกว่านั้นถ้าสามารถลงทุนรอรับผลตอบแทนตามที่สมมติไว้ได้
วันจ่ายมีผลต่อการเลือกสินทรัพย์ด้วย เงินที่ต้องใช้ปีที่สองไม่ควรถูกนับว่าเป็นเงินที่ถือหุ้นต่อไปได้ถึงปีที่หกโดยไม่มีเงื่อนไข หากขายหุ้นในปีที่สองแล้วขาดทุน ค่าเฉลี่ยผลตอบแทนของทั้งแผนก็ไม่ได้สร้างเงินสดสำหรับวันนั้นเพิ่มขึ้น
import numpy as np
import pandas as pd
liabilities = pd.Series(
[120_000.0, 180_000.0, 300_000.0],
index=[2.0, 4.0, 6.0],
name="Payment in baht",
)
liabilities.index.name = "Years from today"
print(liabilities)
print(f"Total future payments: {liabilities.sum():,.2f}")
ตารางมีเงินสามรายการและผลรวม 600,000.00 เครื่องหมาย _ ภายใน 120_000 มีไว้ช่วยอ่านตัวเลข Python ยังคงมองเป็น 120000 ส่วน index บอกว่าจ่ายเมื่อครบกี่ปี ตัวเลข 2.0 เป็นระยะเวลา ไม่ใช่ปีปฏิทิน 2002
ถ้าใช้วันที่จริงต้องตกลงวิธีแปลงวันเป็นเศษส่วนของปีด้วย เช่น จำนวนวันจริงหาร 365 การวัดเวลา 2 ปีพอดีในบทนี้ช่วยให้เห็นหลักการโดยยังไม่ต้องจัดการวันหยุดและวิธีนับวันของตราสารแต่ละชนิด
คิดย้อนจากเงินวันจ่ายมาหาเงินวันนี้
สมมติว่าสามารถลงทุนได้อัตราทบต้นต่อปี 3% เงิน 100 บาทวันนี้จะเป็น 103 บาทเมื่อครบหนึ่งปี ถ้าต้องการ 103 บาทในหนึ่งปีจึงต้องเตรียม 100 บาทวันนี้ การคิดย้อนนี้เรียกว่า discounting หรือการคิดลด
ให้ เป็นจำนวนเงินที่จะจ่ายในอีก ปี และ เป็นอัตราผลตอบแทนต่อปีแบบ effective ซึ่งนับผลทบต้นครบหนึ่งปีแล้ว มูลค่าปัจจุบันคือ
สำหรับเงิน 120,000 บาทในอีกสองปี ที่อัตรา 3% เราต้องเตรียม บาท คูณกลับด้วย จะได้เงินวันจ่าย 120,000 บาท
เราใช้ แทนตัวคูณคิดลด ตัวนี้ไม่มีหน่วย และบอกมูลค่าวันนี้ของเงิน 1 บาทที่จะได้รับในปีที่ หากนำไปคูณเงินที่ต้องจ่าย หน่วยของคำตอบจะกลับมาเป็นบาท
annual_yield = 0.03
years = liabilities.index.to_numpy(dtype=float)
discount_factors = (1 + annual_yield) ** (-years)
present_values = liabilities.to_numpy() * discount_factors
pv_table = pd.DataFrame({
"Payment": liabilities.to_numpy(),
"Discount factor": discount_factors,
"Present value": present_values,
}, index=liabilities.index)
liability_pv = present_values.sum()
print(pv_table.round(4))
print(f"Liability PV: {liability_pv:,.2f}")
ได้มูลค่าปัจจุบันรวม 524,284.45 บาท to_numpy() ดึงค่าจาก Series ออกมาเป็น array เพื่อคำนวณจับคู่ตามตำแหน่ง เราสร้างทั้งเวลาและจำนวนเงินจากตารางเดียวกันจึงรักษาลำดับให้ตรงกัน ** (-years) ยกกำลังติดลบซึ่งเท่ากับการหารด้วยตัวคูณการเติบโต
เงินแต่ละรายการมีเวลารอไม่เท่ากัน จึงต้องคิดลดแยกแล้วบวก การใช้วันจ่ายเฉลี่ยกับยอดรวม 600,000 บาทจะไม่ให้ PV เดียวกันโดยทั่วไป
สัญลักษณ์ ในบทนี้หมายถึงมูลค่าปัจจุบันของภาระทั้งหมด และ คือเงินที่จ่ายในวันที่ ถ้าใช้คำว่า liabilities โดยไม่ระบุว่าเป็นยอดวันจ่ายหรือมูลค่าวันนี้ ผู้อ่านอาจนำตัวเลขคนละเวลาไปเทียบกันได้
อัตราคิดลดต้องสอดคล้องกับวันจ่ายและประเภทเงิน
การใช้ 3% กับทุกอายุเรียกว่า flat yield curve หรือเส้นอัตราผลตอบแทนแบน ในตลาดจริงอัตราของเงินสองปี สี่ปี และหกปีอาจต่างกัน เราสามารถใส่อัตรา zero yield ของแต่ละอายุแล้วคิดลดเงินในวันนั้นโดยตรง
Zero yield หมายถึงอัตราที่สอดคล้องกับเงินก้อนเดียวในวันครบกำหนด จึงเหมาะกับการคิดลด cash flow แต่ละรายการ ส่วน yield to maturity ของพันธบัตรมีคูปองสรุปกระแสเงินหลายวันด้วยอัตราเดียว การเอา yield ของพันธบัตรมีคูปองคนละรุ่นมาใส่แทน zero yield โดยตรงอาจไม่ให้ชุด discount factors ที่สอดคล้องกัน
zero_yields = np.array([0.025, 0.030, 0.035])
curve_pv = np.sum(
liabilities.to_numpy() / (1 + zero_yields) ** years
)
print(f"PV with maturity-specific zero yields: {curve_pv:,.2f}")
ได้ PV รวม 518,195.59 บาท โค้ดใช้อัตรา 2.5% กับเงินปีที่สอง 3% กับเงินปีที่สี่ และ 3.5% กับเงินปีที่หก ผลรวมจะแตกต่างจากการใช้ 3% ทุกอายุ แม้ค่าเฉลี่ยของสามอัตราจะเท่ากับ 3% เพราะทั้งจำนวนเงินและกำหนดจ่ายต่างกัน
อัตราคิดลดสะท้อนข้อตกลงในการประเมินภาระ บทนี้สมมติว่ากระแสเงินแน่นอนเป็นบาทและใช้เส้นอัตราที่สอดคล้องกับการซื้อสินทรัพย์ไม่มีความเสี่ยงผิดนัดในแบบจำลอง หากประเมินตามมาตรฐานบัญชีหรือข้อกำหนดของกองทุน อัตราที่ต้องใช้มีหลักเกณฑ์เฉพาะ จึงต้องตรวจข้อกำหนดนั้นแยกจากสูตรคณิตศาสตร์
การเพิ่มอัตราคิดลดในตารางทำให้ PV ต่ำลง แต่จำนวนเงินที่ต้องจ่าย 600,000 บาทยังเท่าเดิม เช่นเดียวกับการใส่ผลตอบแทนหุ้นคาดหวังสูงขึ้นในแผน การเปลี่ยนสมมติฐานไม่ได้เพิ่มเงินที่มีจริงในบัญชี
Funding ratio วัดเงินที่มีเทียบกับภาระ
ให้ เป็นมูลค่าสินทรัพย์วันนี้ เราคำนวณ funding ratio และส่วนเกินได้ดังนี้
Funding ratio ไม่มีหน่วย เพราะหารบาทด้วยบาท ส่วน surplus หรือส่วนเกินมีหน่วยเป็นบาท หาก ติดลบ เราเรียกขนาดที่ขาดว่า deficit
assets_today = 500_000.0
funding_ratio = assets_today / liability_pv
surplus = assets_today - liability_pv
top_up_today = max(liability_pv - assets_today, 0.0)
print(f"Funding ratio: {funding_ratio:.2%}")
print(f"Surplus: {surplus:,.2f}")
print(f"Top-up for full funding now: {top_up_today:,.2f}")
ได้ funding ratio 95.37% ส่วนเกิน −24,284.45 บาท และเงินเติมเพื่อให้สินทรัพย์เท่ากับ PV ของภาระวันนี้ 24,284.45 บาท คำว่า fully funded ในกรณีนี้หมายถึงสินทรัพย์เพียงพอซื้อกระแสเงินตามราคาและสมมติฐานที่ใช้ ไม่ใช่ความน่าจะเป็นสำเร็จ 100% ของพอร์ตใดก็ได้ที่นำเงินไปลงทุน
ถ้าเงิน 524,284.45 บาทถูกนำไปซื้อสินทรัพย์ที่มี payoff ตรงกับเป้าหมายภายใต้เงื่อนไขที่กำหนด เราติดตามการ matching ได้ แต่ถ้านำเงินจำนวนเดียวกันไปลงทุนหุ้นทั้งหมด เงินอาจลดลงก่อนถึงวันจ่าย แม้ funding ratio ณ วันเริ่มจะเท่ากับ 100%
สินทรัพย์ไม่ลด แต่ funding ratio ลดได้
ตรึงสินทรัพย์ไว้ที่ 500,000 บาท และประเมินภาระใหม่ที่เวลาเดิม โดยเปลี่ยนอัตราคิดลดเพียงอย่างเดียว
rate_cases = [0.02, 0.03, 0.04]
funding_rows = []
for y in rate_cases:
value = np.sum(liabilities.to_numpy() / (1 + y) ** years)
funding_rows.append({
"Yield": y,
"Assets": assets_today,
"Liability PV": value,
"Funding ratio": assets_today / value,
})
funding_table = pd.DataFrame(funding_rows)
print(funding_table.round(4))
| อัตราคิดลด | PV ของภาระ | Funding ratio ของเงิน 500,000 บาท |
|---|---|---|
| 2% | 548,023.85 | 91.24% |
| 3% | 524,284.45 | 95.37% |
| 4% | 501,905.86 | 99.62% |
เมื่ออัตราลดจาก 3% เป็น 2% ต้องใช้เงินวันนี้มากขึ้นเพื่อเตรียมเงินปลายทางเท่าเดิม ดังนั้น funding ratio ลดลงแม้สินทรัพย์คงที่ นี่เป็นการเปรียบเทียบสถานการณ์ ณ เวลาเดียวกัน ยังไม่ใช่เส้นทางที่ผ่านไปปีละหนึ่งขั้น และยังไม่ได้คิดดอกเบี้ยที่บัญชีเงินสดได้รับระหว่างทาง
การมองสินทรัพย์อย่างเดียวจึงอาจทำให้ประเมินความสามารถชำระเป้าหมายคลาดเคลื่อน หากทั้งสินทรัพย์และภาระลดลง ต้องคำนวณอัตราส่วนใหม่ก่อน เช่น สินทรัพย์ลดจาก 100 เป็น 95 แต่ภาระลดจาก 100 เป็น 90 funding ratio จะเพิ่มจาก 100% เป็นประมาณ 105.56%
เป้าหมายเป็นจำนวนบาท หรือเป็นกำลังซื้อ
เงิน 300,000 บาทในอีกหกปีอาจเป็นจำนวนตามสัญญาที่คงที่ แต่ถ้าเราหมายถึง “ค่าครองชีพที่ซื้อสินค้าได้เท่าเงิน 300,000 บาทวันนี้” จำนวนเงินวันจ่ายจะเปลี่ยนตามระดับราคา เป้าหมายแบบหลังเรียกว่า real goal หรือเป้าหมายในหน่วยกำลังซื้อ
สมมติเงินเฟ้อคงที่ 2% ต่อปี เป้าหมายกำลังซื้อ 300,000 บาทวันนี้ต้องใช้เงิน nominal เมื่อครบหกปีเท่ากับ
ถ้าอัตราทบต้น nominal เท่ากับ 3% อัตรา real ที่สอดคล้องกันภายใต้สมมติฐานเงินเฟ้อคงที่คือ
goal_today_money = 300_000.0
goal_years = 6
inflation = 0.02
nominal_rate = 0.03
goal_future_nominal = goal_today_money * (1 + inflation) ** goal_years
real_rate = (1 + nominal_rate) / (1 + inflation) - 1
pv_nominal_method = goal_future_nominal / (1 + nominal_rate) ** goal_years
pv_real_method = goal_today_money / (1 + real_rate) ** goal_years
print(f"Future nominal goal: {goal_future_nominal:,.2f}")
print(f"Real annual rate: {real_rate:.4%}")
print(f"PV by nominal method: {pv_nominal_method:,.2f}")
print(f"PV by real method: {pv_real_method:,.2f}")
print(np.isclose(pv_nominal_method, pv_real_method))
ได้เงินวันจ่ายประมาณ 337,848.73 บาท อัตรา real ประมาณ 0.9804% และสองวิธีให้ PV เท่ากันที่ 282,942.99 บาท คำสั่ง np.isclose ตรวจว่าค่าทั้งสองใกล้กันในระดับความคลาดเคลื่อนที่เหมาะกับเลขทศนิยมของคอมพิวเตอร์
เงื่อนไขเงินเฟ้อคงที่ทำให้ตัวอย่างนี้คำนวณง่าย เมื่อเงินเฟ้อไม่แน่นอน เป้าหมาย nominal ก็ไม่แน่นอนด้วย การซื้อพันธบัตร nominal ที่ครบหกปีจะล็อกจำนวนบาทตามสัญญา แต่กำลังซื้อของเงินนั้นยังเปลี่ยนได้
ตราสารที่ปรับตามดัชนีเงินเฟ้ออาจช่วยรับความเสี่ยงด้านนี้ เช่น TIPS ของสหรัฐปรับเงินต้นตาม CPI และคำนวณดอกเบี้ยจากเงินต้นที่ปรับแล้ว อย่างไรก็ตาม TIPS อ้างอิงเงินเฟ้อสหรัฐและจ่ายดอลลาร์ จึงไม่ตรงกับค่าเรียนหรือค่าครองชีพสกุลบาทโดยอัตโนมัติ ความคลาดเคลื่อนระหว่างดัชนี สกุลเงิน และค่าใช้จ่ายจริงเป็น basis risk รายละเอียด TIPS จาก TreasuryDirect
สร้างพอร์ตที่จ่ายเงินตรงกับเป้าหมาย
Zero-coupon bond หรือพันธบัตรไม่มีคูปองจ่ายเงินก้อนเดียวเมื่อครบกำหนด สมมติว่ามีตราสารไม่มีความเสี่ยงผิดนัดทุกอายุที่ต้องการ ซื้อขายได้ตามจำนวนที่ต้องการ และใช้ discount factors ชุดเดียวกับที่ประเมินภาระ เราซื้อเงินต้นครบกำหนด 120,000 บาทที่ปี 2 อีก 180,000 บาทที่ปี 4 และ 300,000 บาทที่ปี 6 ได้ด้วยต้นทุนรวมเท่ากับ
นี่คือ cash-flow matching: วันที่และจำนวนเงินรับจากสินทรัพย์ตรงกับเงินที่ต้องจ่าย สำหรับบุคคลเรียกพอร์ตเช่นนี้ว่า goal-hedging portfolio หรือ GHP และในบริบทภาระของสถาบันเรียกว่า liability-hedging portfolio หรือ LHP
หากแต่ละหน่วยจ่ายเงิน 1 บาท ณ วันครบกำหนด ราคาต่อหน่วยคือ discount factor จำนวนหน่วยที่ซื้อเท่ากับเงินเป้าหมาย ไม่ใช่จำนวนบาทที่ใช้ซื้อวันนี้
bond_units = liabilities.to_numpy()
purchase_costs = bond_units * discount_factors
cash_received = bond_units * np.ones(len(bond_units))
matching_table = pd.DataFrame({
"ZCB units": bond_units,
"Price per unit": discount_factors,
"Cost today": purchase_costs,
"Cash at own maturity": cash_received,
"Required payment": liabilities.to_numpy(),
}, index=liabilities.index)
print(matching_table.round(4).to_string())
print(np.allclose(cash_received, liabilities.to_numpy()))
ผลตรวจเป็น True เราไม่ได้นำพันธบัตรปีที่สองไปถือจนปีที่หก เงินของมันถูกใช้จ่ายเมื่อครบปีที่สองตามแผน การประเมิน funding ratio หลังจ่ายแล้วต้องเอาทั้งเงินจ่ายและ liability ที่ชำระเสร็จออกพร้อมกัน
ราคาพันธบัตรแกว่ง แต่สัดส่วนการรองรับภาระคงที่ได้
พิจารณาเฉพาะเป้าหมายหนึ่งรายการ จ่าย 100,000 บาทในอีกห้าปี ถ้าราคา ZCB ต่อเงินครบกำหนด 1 บาทวันนี้คือ มูลค่าภาระคือ การถือ ZCB 100,000 หน่วยจึงมีสินทรัพย์เท่ากับภาระทุกครั้งที่ใช้ราคาเดียวกันประเมินทั้งสองฝั่ง
ถ้ามีทุนเพียง 90% ของต้นทุน ซื้อได้ 90,000 หน่วย funding ratio จะคงอยู่ที่ 90% ภายใต้การ matching นี้ การ hedge รักษาสัดส่วนที่เริ่มต้นไว้ แต่ไม่ได้เปลี่ยนเงินที่ขาดให้กลายเป็นเงินที่มี
single_goal = 100_000.0
remaining_years = np.array([5.0, 4.0, 3.0])
scenario_yields = np.array([0.03, 0.02, 0.04])
single_bond_prices = (1 + scenario_yields) ** (-remaining_years)
matched_units = 0.90 * single_goal
matched_assets = matched_units * single_bond_prices
single_liability_values = single_goal * single_bond_prices
print(pd.DataFrame({
"Remaining years": remaining_years,
"Bond price": single_bond_prices,
"Assets": matched_assets,
"Liability PV": single_liability_values,
"Funding ratio": matched_assets / single_liability_values,
}).round(4))
ทั้งสามแถวให้ funding ratio 0.9 หรือ 90% ตัวอย่างกำหนดราคาแต่ละวันจากเส้นอัตราแบนของวันนั้นเพื่อให้เห็นเอกลักษณ์ทางพีชคณิต ไม่ได้จำลองว่าอัตราดอกเบี้ยจะเคลื่อนไหวแบบใดจริง
ในทางปฏิบัติอาจไม่มี ZCB ครบทุกอายุ ตราสารอาจผิดนัด มีต้นทุนซื้อขาย หรือภาระเปลี่ยนจากการประมาณค่าใช้จ่ายใหม่ หากจับคู่ cash flow ไม่ได้ตรงทั้งหมด เราอาจจับคู่ความไวต่ออัตราดอกเบี้ยด้วย duration ซึ่งจะคำนวณในบท พันธบัตรและ Duration
แยกหน้าที่ของ PSP และ GHP
Performance-seeking portfolio หรือ PSP คือส่วนที่รับความเสี่ยงเพื่อหาโอกาสเติบโต อาจเป็นพอร์ตหุ้นและสินทรัพย์อื่นที่กระจายความเสี่ยงแล้ว ส่วน GHP จัดตามวันจ่าย สกุลเงิน และความเสี่ยงของเป้าหมาย การแบ่งนี้เป็นการแยกหน้าที่ ไม่ได้กำหนดว่าทุกคนต้องถือหุ้นกี่เปอร์เซ็นต์
เราประเมิน PSP ด้วยผลตอบแทน ความเสี่ยง ต้นทุน และความน่าเชื่อถือของสมมติฐาน ส่วน GHP ต้องดูว่าจ่ายเงินตรงหรือเคลื่อนไหวสอดคล้องกับมูลค่าเป้าหมายเพียงใด การจัดอันดับ GHP ด้วย Sharpe ratio เพียงตัวเดียวอาจพาให้เลือกพอร์ตที่ผลตอบแทนดีแต่รับความเสี่ยงคนละชนิดกับภาระ
สมมติมีเงิน 100,000 บาท และเป้าหมายขั้นต่ำ 100,000 บาทในอีกห้าปี อัตราที่ล็อกได้เท่ากับ 3% ต่อปี การซื้อ ZCB รองรับเป้าหมายทั้งจำนวนใช้ประมาณ 86,260.88 บาท เหลือประมาณ 13,739.12 บาทให้จัดสรรส่วนอื่นได้ ภายใต้สมมติฐานว่าเงินส่วนอื่นไม่สร้างภาระขาดทุนเกินจำนวนที่ลงทุน
starting_assets = 100_000.0
minimum_goal = 100_000.0
horizon = 5
locked_yield = 0.03
ghp_cost = minimum_goal / (1 + locked_yield) ** horizon
remaining_budget = starting_assets - ghp_cost
print(f"Cost to match the minimum goal: {ghp_cost:,.2f}")
print(f"Budget left over: {remaining_budget:,.2f}")
เงินที่เหลือในตัวอย่างนี้เป็นจำนวนที่คำนวณได้จากเป้าหมายและราคา hedge หากลงทุน PSP ด้วยเงินกู้หรือเครื่องมือที่สร้างภาระเพิ่มเติม การกันเงินใน GHP อาจไม่เพียงพอเมื่อเจ้าหนี้มีสิทธิเรียกร้องสินทรัพย์รวม จึงต้องกำหนดขอบเขตของพอร์ตและสัญญาด้วย
ถ้าต้นทุน GHP สูงกว่าเงินที่มี การเลือก PSP ให้เสี่ยงขึ้นอาจเพิ่มโอกาสบางเส้นทางที่จะถึงเป้าหมาย พร้อมเพิ่มโอกาสขาดทุนในเส้นทางอื่น ผู้ลงทุนยังต้องพิจารณาเพิ่มเงินออม ลดจำนวนเป้าหมาย เลื่อนเวลา หรือยอมรับความเสี่ยงที่กำหนดไว้อย่างชัดเจน
งบเงินและงบความเสี่ยงต้องดูร่วมกัน
การจัดสรร 60% ไป PSP ไม่ได้บอกความเสี่ยงครบถ้วน PSP สองก้อนที่มี volatility ต่างกันย่อมส่งผลต่อแผนไม่เท่ากัน และ GHP สองก้อนที่จับคู่ภาระได้ต่างกันก็ทำให้ funding ratio แกว่งไม่เท่ากัน
Risk budget จึงควรเขียนเป็นผลที่ยอมรับได้ เช่น ความถี่จำลองที่เงินปลายทางต่ำกว่าเป้าหมาย จำนวนเงินที่ขาดเมื่อขาดจริง หรือขนาด drawdown ของ funding ratio ระหว่างทาง ถ้าเป้าหมายมีเงินจ่ายทุกปี ต้องตรวจสภาพคล่องแต่ละปีด้วย การจบปีสุดท้ายด้วยเงินพอไม่ได้พิสูจน์ว่ามีเงินจ่ายครบก่อนหน้านั้น
เงินเฟ้อ อายุขัย และค่าใช้จ่ายสุขภาพทำให้ภาระของบุคคลไม่แน่นอน การกำหนดเพียงค่าใช้จ่ายยี่สิบปีแล้วรายงานว่าแผนครบถ้วนเท่ากับละความเสี่ยงหลังปีที่ยี่สิบไว้ข้างนอกแบบจำลอง ต้องระบุส่วนที่จำลองและเงินรองรับส่วนที่ยังไม่จำลองให้ชัด
ในบท จัดสรรเงินตามเป้าหมาย เราจะเปรียบเทียบสัดส่วนคงที่ การลดความเสี่ยงตามเวลา และการปรับตามส่วนเผื่อ โดยรายงานทั้งเงินปลายทางและการขาดเป้าหมายจากทุกเส้นทาง
แบบฝึกหัดพร้อมวิธีตรวจ
- ต้องจ่าย 103,000 บาทในอีกหนึ่งปี และล็อกอัตรา 3% ได้ ต้องมีเงินวันนี้เท่าไร?
- มีสินทรัพย์ 90,000 บาท และ PV ของภาระ 100,000 บาท funding ratio กับ deficit เป็นเท่าไร?
- หากสินทรัพย์คงที่แต่ดอกเบี้ยลดลง เหตุใด funding ratio ของเป้าหมายเงินคงที่จึงอาจลดลง?
- เป้าหมายคือค่าครองชีพเทียบเท่า 100,000 บาทวันนี้ในอีกสองปี เงินเฟ้อคงที่ 2% ต้องตั้งเงิน nominal เท่าไร?
- การถือ ZCB ตรงอายุด้วยเงิน 80% ของ PV เป้าหมายช่วยให้ funding ratio กลายเป็น 100% ได้หรือไม่?
- ผู้ลงทุนมีหนี้จ่ายบาท แต่ GHP เป็นตราสารดอลลาร์ที่จ่ายวันตรงกัน ยังเหลือความเสี่ยงอะไร?
เปิดเฉลยและเหตุผล
ข้อ 1 ใช้ บาท ข้อ 2 funding ratio 90% และ deficit 10,000 บาท โดย surplus เท่ากับ −10,000 บาท
ข้อ 3 เมื่อคิดลดน้อยลงต้องเตรียมเงินวันนี้มากขึ้น ตัวส่วนของ funding ratio จึงเพิ่ม ส่วนข้อ 4 เงิน nominal เท่ากับ บาท การใช้เป้าหมาย 100,000 บาทคงที่ในวันจ่ายจะได้กำลังซื้อน้อยกว่าที่กำหนด
ข้อ 5 การ matching รักษาสัดส่วน 80% ภายใต้สมมติฐานของแบบจำลอง ต้องเติมเงินหรือเปลี่ยนเป้าหมายจึงจะซื้อ cash flow ได้ครบ ข้อ 6 ยังมีความเสี่ยงอัตราแลกเปลี่ยน รวมถึงความเสี่ยงผิดนัดและความต่างของสัญญา หากไม่ได้กำจัดด้วยวิธีอื่นอย่างสอดคล้องกัน
แหล่งเรียนและขอบเขต
อ่าน Transcript ของ From Asset Management to Asset-Liability Management, Liability hedging portfolios และ Liability-driven investing ประกอบ Notebook lab_124.ipynb ที่ผู้เรียนให้มา ตัวเลขและโค้ดในหน้านี้เป็นตัวอย่างสมมติที่เรียบเรียงขึ้นใหม่
การ matching ในตัวอย่างอาศัย cash flow แน่นอน เส้นอัตราที่สอดคล้องกัน และตราสารที่จ่ายได้ตามสัญญา การใช้งานที่มีภาระหลายประเภทต้องกำหนดวิธีประเมินและความเสี่ยงที่ hedge ไม่ได้เพิ่ม ดูกรอบเรื่อง immunization ใน CFA Institute: Liability-Driven and Index-Based Strategies