การบริหารความเสี่ยงด้วย Neural Network

การบริหารความเสี่ยงเชิงปริมาณด้วย Python

Jamsheed Shorish

Computational Economist

การอัปเดตพอร์ตโฟลิโอแบบ real-time

  • การบริหารความเสี่ยง
    • นิยาม มาตรวัดความเสี่ยง (VaR, CVaR)
    • ประมาณ มาตรวัดความเสี่ยง (เชิงพารามิเตอร์, อิงอดีต, Monte Carlo)
    • ปรับปรุง พอร์ตโฟลิโอให้เหมาะสม (เช่น Modern Portfolio Theory)
  • ข้อมูลตลาด ใหม่ => อัปเดต น้ำหนักพอร์ตโฟลิโอ
    • ปัญหา: การปรับพอร์ตโฟลิโอมีต้นทุนสูง
    • วิธีแก้: $\text{weights} = f(\text{prices})$
    • ประเมิน $f$ แบบ real-time
    • อัปเดต $f$ เป็นครั้งคราว
การบริหารความเสี่ยงเชิงปริมาณด้วย Python

Neural Networks

  • Neural Network: $\text{output} = f(\text{input})$
    • Neuron: โหนดประมวลผลที่เชื่อมต่อกันในฟังก์ชัน
  • พัฒนาขึ้นครั้งแรกในช่วงทศวรรษ 1940-1950
  • ต้น 2000s: นำ neural network มาใช้กับ "big data"
    • การจดจำและประมวลผลภาพ
    • ข้อมูลทางการเงิน
    • ข้อมูล search engine
  • Deep Learning: neural network ในฐานะส่วนหนึ่งของ Machine Learning
    • 2015: Google เปิดตัวไลบรารี TensorFlow สำหรับ Deep Learning แบบ open-source บน Python
การบริหารความเสี่ยงเชิงปริมาณด้วย Python

โครงสร้าง Neural Network

  • เลเยอร์: neurons ที่เชื่อมต่อกันสำหรับประมวลผล
    • Input layer

input layer ของ neural network

การบริหารความเสี่ยงเชิงปริมาณด้วย Python

โครงสร้าง Neural Network

  • โครงสร้าง Neural Network
    • Input layer
    • Hidden layer

hidden layer ของ neural network

การบริหารความเสี่ยงเชิงปริมาณด้วย Python

โครงสร้าง Neural Network

  • โครงสร้าง Neural Network
    • Input layer
    • Hidden layer
    • Output layer
  • การฝึกโมเดล: เรียนรู้ความสัมพันธ์ระหว่าง input และ output

ภาพแสดง input, hidden และ output layer

การบริหารความเสี่ยงเชิงปริมาณด้วย Python

โครงสร้าง Neural Network

  • โครงสร้าง Neural Network
    • Input layer
    • Hidden layer
    • Output layer
  • การฝึกโมเดล: เรียนรู้ความสัมพันธ์ระหว่าง input และ output
    • ราคาสินทรัพย์ => Input layer

ภาพแสดงราคาสินทรัพย์ที่ป้อนเข้า neural network

การบริหารความเสี่ยงเชิงปริมาณด้วย Python

โครงสร้าง Neural Network

  • โครงสร้าง Neural Network
    • Input layer
    • Hidden layer
    • Output layer
  • การฝึกโมเดล: เรียนรู้ความสัมพันธ์ระหว่าง input และ output
    • ราคาสินทรัพย์ => Input layer
    • การประมวลผลใน input + hidden layer

ภาพแสดง weight edges ใน neural network

การบริหารความเสี่ยงเชิงปริมาณด้วย Python

โครงสร้าง Neural Network

  • โครงสร้าง Neural Network
    • Input layer
    • Hidden layer
    • Output layer
  • การฝึกโมเดล: เรียนรู้ความสัมพันธ์ระหว่าง input และ output
    • ราคาสินทรัพย์ => Input layer
    • การประมวลผลใน input + hidden layer
    • การประมวลผลใน hidden + output layer

ภาพแสดง weights จาก hidden ไปยัง output layer

การบริหารความเสี่ยงเชิงปริมาณด้วย Python

โครงสร้าง Neural Network

  • โครงสร้าง Neural Network
    • Input layer
    • Hidden layer
    • Output layer
  • การฝึกโมเดล: เรียนรู้ความสัมพันธ์ระหว่าง input และ output
    • ราคาสินทรัพย์ => Input layer
    • การประมวลผลใน input + hidden layer
    • การประมวลผลใน hidden + output layer
    • Output => น้ำหนักพอร์ตโฟลิโอ

ภาพแสดง output layer ในรูปแบบน้ำหนักพอร์ตโฟลิโอ

การบริหารความเสี่ยงเชิงปริมาณด้วย Python

การใช้ Neural Network สำหรับการปรับพอร์ตโฟลิโอให้เหมาะสม

  • การฝึกโมเดล
    • เปรียบเทียบ output กับน้ำหนักพอร์ตโฟลิโอ "ที่ดีที่สุด" ที่มีอยู่
    • เป้าหมาย: ลด "ค่าความผิดพลาด" ระหว่าง output กับน้ำหนักที่ต้องการ
    • ค่าความผิดพลาดน้อย => โมเดล ได้รับการฝึก แล้ว
  • การใช้งาน
    • Input: ราคาสินทรัพย์ใหม่ที่ยังไม่เคยเห็น
    • Output: น้ำหนักพอร์ตโฟลิโอ "ที่ดีที่สุด" ที่คาดการณ์สำหรับราคาใหม่
    • น้ำหนักที่ดีที่สุด = การบริหารความเสี่ยง
การบริหารความเสี่ยงเชิงปริมาณด้วย Python

การสร้าง Neural Network ใน Python

  • Keras: ไลบรารี Python ระดับสูงสำหรับ neural network และ deep learning
  • ข้อมูลเพิ่มเติม: Introduction to Deep Learning with Keras

 

from tensorflow.keras.models import Sequential

from tensorflow.keras.layers import Dense
model = Sequential() model.add(Dense(10, input_dim=4, activation='sigmoid')) model.add(Dense(4))
การบริหารความเสี่ยงเชิงปริมาณด้วย Python

การฝึกโมเดลใน Python

  • ราคาสินทรัพย์ในอดีต: เมทริกซ์ training_input
  • น้ำหนักพอร์ตโฟลิโอในอดีต: เวกเตอร์ training_output
  • Compile โมเดลโดยกำหนด:
    • ฟังก์ชันลดค่าความผิดพลาด ('loss')
    • อัลกอริทึมการปรับค่า ('optimizer')
  • Fit โมเดลกับข้อมูลฝึก
    • epochs: จำนวนรอบการฝึกเพื่ออัปเดตพารามิเตอร์ภายใน
model.compile(loss='mean_squared_error', optimizer='rmsprop')

model.fit(training_input, training_output, epochs=100)
การบริหารความเสี่ยงเชิงปริมาณด้วย Python

การบริหารความเสี่ยงใน Python

  • การใช้งาน: ป้อนข้อมูลราคาสินทรัพย์ใหม่ (เช่น แบบ real-time)
    • เวกเตอร์ใหม่ new_asset_prices ส่งเข้า input layer
  • ประเมินโมเดลด้วย model.predict() บนราคาใหม่
    • ผลลัพธ์: น้ำหนักพอร์ตโฟลิโอที่ predicted
  • สะสมข้อมูลเพียงพอตามเวลา => ฝึกโมเดลใหม่
    • ทดสอบโมเดลกับข้อมูลในอดีต => backtesting
# new asset prices are in the vector new_asset_prices
predicted = model.predict(new_asset_prices)
การบริหารความเสี่ยงเชิงปริมาณด้วย Python

มาฝึกกันเถอะ!

การบริหารความเสี่ยงเชิงปริมาณด้วย Python

Preparing Video For Download...