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
| class ScenarioAnalysis:
def __init__(self):
self.scenarios = {}
self.scenario_templates = {
'Data_Breach': {
'description': 'Confidential data breach',
'probability_factors': ['Security_controls', 'Employee_training', 'System_patches'],
'impact_factors': ['Data_volume', 'Data_sensitivity', 'Regulatory_requirements']
},
'Ransomware': {
'description': 'Ransomware attack',
'probability_factors': ['Email_security', 'Backup_systems', 'User_awareness'],
'impact_factors': ['System_downtime', 'Data_recovery', 'Business_continuity']
},
'Insider_Threat': {
'description': 'Insider threat',
'probability_factors': ['Access_controls', 'Monitoring_systems', 'Employee_satisfaction'],
'impact_factors': ['Data_access', 'System_damage', 'Reputation']
}
}
def create_scenario(self, scenario_id, scenario_type, custom_factors=None):
"""Create risk scenario"""
template = self.scenario_templates.get(scenario_type, {})
scenario = {
'scenario_id': scenario_id,
'type': scenario_type,
'description': template.get('description', ''),
'probability_factors': template.get('probability_factors', []),
'impact_factors': template.get('impact_factors', []),
'probability_score': 0,
'impact_score': 0,
'risk_score': 0,
'created_date': '2025-10-26'
}
if custom_factors:
scenario.update(custom_factors)
self.scenarios[scenario_id] = scenario
return scenario
def assess_scenario(self, scenario_id, factor_scores):
"""Assess scenario with factor scores"""
if scenario_id not in self.scenarios:
return None
scenario = self.scenarios[scenario_id]
# Calculate probability based on factors
prob_factors = scenario['probability_factors']
prob_scores = [factor_scores.get(factor, 0) for factor in prob_factors]
scenario['probability_score'] = sum(prob_scores) / len(prob_scores) if prob_scores else 0
# Calculate impact based on factors
impact_factors = scenario['impact_factors']
impact_scores = [factor_scores.get(factor, 0) for factor in impact_factors]
scenario['impact_score'] = sum(impact_scores) / len(impact_scores) if impact_scores else 0
# Calculate risk score
scenario['risk_score'] = scenario['probability_score'] * scenario['impact_score']
return scenario
def compare_scenarios(self, scenario_ids):
"""Compare scenarios"""
comparison = []
for scenario_id in scenario_ids:
if scenario_id in self.scenarios:
scenario = self.scenarios[scenario_id]
comparison.append({
'scenario_id': scenario_id,
'type': scenario['type'],
'probability': scenario['probability_score'],
'impact': scenario['impact_score'],
'risk_score': scenario['risk_score']
})
# Sort by risk score
comparison.sort(key=lambda x: x['risk_score'], reverse=True)
return comparison
# Usage example
scenario_analysis = ScenarioAnalysis()
# Create scenarios
scenario_analysis.create_scenario('SCEN-001', 'Data_Breach')
scenario_analysis.create_scenario('SCEN-002', 'Ransomware')
scenario_analysis.create_scenario('SCEN-003', 'Insider_Threat')
# Assess scenarios
factor_scores = {
'Security_controls': 0.7,
'Employee_training': 0.6,
'System_patches': 0.8,
'Data_volume': 0.9,
'Data_sensitivity': 0.8,
'Regulatory_requirements': 0.7,
'Email_security': 0.5,
'Backup_systems': 0.8,
'User_awareness': 0.6,
'System_downtime': 0.7,
'Data_recovery': 0.6,
'Business_continuity': 0.8,
'Access_controls': 0.7,
'Monitoring_systems': 0.6,
'Employee_satisfaction': 0.8,
'Data_access': 0.9,
'System_damage': 0.5,
'Reputation': 0.8
}
for scenario_id in ['SCEN-001', 'SCEN-002', 'SCEN-003']:
scenario_analysis.assess_scenario(scenario_id, factor_scores)
comparison = scenario_analysis.compare_scenarios(['SCEN-001', 'SCEN-002', 'SCEN-003'])
print(f"Scenario comparison: {comparison}")
|