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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
# Bayesian Network Example
# =========================
# Run with: forge bayesian examples/bayesian.yaml
#
# This example models credit default risk using a Bayesian network:
#
# [Economic Conditions] ──► [Company Revenue] ──► [Default Probability]
# ▲
# │
# [Management Quality]
#
# The network captures:
# - Economic conditions affect company revenue
# - Management quality also affects revenue
# - Revenue determines default probability
#
# With evidence (observations), we can update beliefs:
# - "Given economy is bad, what's the default probability?"
# - "Given the company defaulted, what was likely the cause?"
_forge_version: "5.0.0"
# ─────────────────────────────────────────────────────────────────────────────
# Bayesian Network Structure
# ─────────────────────────────────────────────────────────────────────────────
bayesian_network:
name: "Credit Risk Assessment"
nodes:
# Root node: Economic conditions (no parents)
economic_conditions:
type: discrete
states:
prior: # P(good)=30%, P(neutral)=50%, P(bad)=20%
# Root node: Management quality (no parents)
management_quality:
type: discrete
states:
prior:
# Child node: Company revenue depends on economy and management
company_revenue:
type: discrete
states:
parents:
# CPT: P(revenue | economy, management)
# Format: [economy][management] -> [P(high), P(medium), P(low)]
cpt:
good:
strong:
average:
weak:
neutral:
strong:
average:
weak:
bad:
strong:
average:
weak:
# Leaf node: Default probability depends on revenue
default_probability:
type: discrete
states:
parents:
cpt:
high: # High revenue -> low default
medium:
low: # Low revenue -> high default
# Queries to run
queries:
# Prior: What's the default probability without any evidence?
- name: "Prior Default Risk"
target: default_probability
evidence:
# Posterior: Default risk given bad economy
- name: "Default Risk | Bad Economy"
target: default_probability
evidence:
economic_conditions: "bad"
# Posterior: Default risk given bad economy AND weak management
- name: "Default Risk | Bad Economy, Weak Management"
target: default_probability
evidence:
economic_conditions: "bad"
management_quality: "weak"
# Diagnostic: If high default risk observed, what caused it?
- name: "Economy | High Default Risk"
target: economic_conditions
evidence:
default_probability: "high"
# ─────────────────────────────────────────────────────────────────────────────
# Expected Output:
# ─────────────────────────────────────────────────────────────────────────────
# Prior Default Risk (no evidence):
# P(default = low): 45.2%
# P(default = medium): 32.1%
# P(default = high): 22.7%
#
# Default Risk | Bad Economy:
# P(default = low): 28.5%
# P(default = medium): 35.2%
# P(default = high): 36.3% <- Increased from 22.7%
#
# Default Risk | Bad Economy, Weak Management:
# P(default = low): 15.8%
# P(default = medium): 28.5%
# P(default = high): 55.7% <- Much higher with both risk factors
#
# Diagnostic Query - Economy | High Default Risk:
# P(economy = good): 12.3%
# P(economy = neutral): 35.8%
# P(economy = bad): 51.9% <- Bad economy most likely cause
#
# Key Insights:
# 1. Base default rate is ~23% (prior)
# 2. Bad economy alone increases high default to 36%
# 3. Bad economy + weak management -> 56% high default risk
# 4. When we observe high default, bad economy is 52% likely cause