File size: 6,028 Bytes
7875fd0
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
c21d83c
 
 
 
 
 
 
 
 
 
7875fd0
 
c21d83c
7875fd0
 
 
 
 
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
import gradio as gr
import pandas as pd
import pickle
import shap
import xgboost
import matplotlib
import matplotlib.pyplot as plt
import io
matplotlib.use('Agg')
pc = ["Enterprise System", "Management Information System", "Safety Critical System", "Transaction Processing System" ]
rc = ['Constraints','Functional','Interfaces','Performance','Reliability&Availability','Safety','Security','Standards','Supportability','Usability']
rtc = ['Budget','Business','Cost','Design','Functional Validity','Organizational Environment','Overdrawn Budget','People','Performance','Personal','Planning&Control','Process','Project complexity','Quality','Requirement','Resource availability','Schedule','Software','Team','TimeDimension','Unrealistic Requirements','User']
mor = ['Extreme','High','Low','Medium','Negligible','Very High','Very Low']
imp = ["Low", "Catastrophic", "High", "Insignificant", "High", "Moderate"]
dor = ['Cost','Estimations','Organizational Environment','Organizational Requirements','Planning and Control','Project Complexity','Project complexity','Requirements','Schedule','Software Requirement','Team','User','Planning and Control']
def ml_function(probability, affecting_no_of_modules,
                fixing_duration, project_category, requirement_category, risk_target_category,
                magnitude_of_risk, impact, dimension_of_risk, fix_cost_percent_of_project):
    data = list()
    data.append(probability)
    data.append(affecting_no_of_modules)
    data.append(fixing_duration)
    data.extend([bool(c in project_category) for c in pc])
    data.extend([bool(c in requirement_category) for c in rc])
    data.extend([bool(c in risk_target_category) for c in rtc])
    data.extend([bool(c in magnitude_of_risk) for c in mor])
    data.extend([bool(c in impact) for c in imp])
    data.extend([bool(c in dimension_of_risk) for c in dor])
    fix_cost_percent_of_project_one_hot = [False] * 10
    fix_cost_percent_of_project_one_hot[fix_cost_percent_of_project] = True
    data.extend(fix_cost_percent_of_project_one_hot)

    df = pd.DataFrame([data])
    df.columns = ['Probability', 'Afftecting No of Modules', 'Fixing Duration (Days)',
       'project Category_Enterprise System',
       'project Category_Management Information System',
       'project Category_Safety Critical System',
       'project Category_Transaction Processing System',
       'Requirement Category_Constraints', 'Requirement Category_Functional',
       'Requirement Category_Interfaces', 'Requirement Category_Performance',
       'Requirement Category_Reliability & Availability',
       'Requirement Category_Safety', 'Requirement Category_Security',
       'Requirement Category_Standards', 'Requirement Category_Supportability',
       'Requirement Category_Usability', 'Risk Target Category_Budget',
       'Risk Target Category_Business', 'Risk Target Category_Cost',
       'Risk Target Category_Design',
       'Risk Target Category_FunctionalValidity',
       'Risk Target Category_Organizational Environment',
       'Risk Target Category_Overdrawn Budget', 'Risk Target Category_People',
       'Risk Target Category_Performance', 'Risk Target Category_Personal',
       'Risk Target Category_Planning & Control',
       'Risk Target Category_Process',
       'Risk Target Category_Project complexity',
       'Risk Target Category_Quality', 'Risk Target Category_Requirement',
       'Risk Target Category_Resource availability',
       'Risk Target Category_Schedule', 'Risk Target Category_Software',
       'Risk Target Category_Team', 'Risk Target Category_Time Dimension',
       'Risk Target Category_Unrealistic Requirements',
       'Risk Target Category_User', 'Magnitude of Risk_Extreme',
       'Magnitude of Risk_High', 'Magnitude of Risk_Low',
       'Magnitude of Risk_Medium', 'Magnitude of Risk_Negligible',
       'Magnitude of Risk_Very High', 'Magnitude of Risk_Very Low',
       'Impact_Low', 'Impact_catastrophic', 'Impact_high',
       'Impact_insignificant', 'Impact_moderate', 'Dimension of Risk_Cost',
       'Dimension of Risk_Estimations',
       'Dimension of Risk_Organizational Environment',
       'Dimension of Risk_Organizational Requirements',
       'Dimension of Risk_Planning and Control',
       'Dimension of Risk_Project Complexity',
       'Dimension of Risk_Project complexity',
       'Dimension of Risk_Requirements', 'Dimension of Risk_Schedule',
       'Dimension of Risk_Software Requirement', 'Dimension of Risk_Team',
       'Dimension of Risk_User', 'Dimension of Risk_planning and control',
       'Fix Cost (\% of Project)_0', 'Fix Cost (\% of Project)_1',
       'Fix Cost (\% of Project)_10', 'Fix Cost (\% of Project)_11',
       'Fix Cost (\% of Project)_2', 'Fix Cost (\% of Project)_21',
       'Fix Cost (\% of Project)_3', 'Fix Cost (\% of Project)_4',
       'Fix Cost (\% of Project)_5', 'Fix Cost (\% of Project)_6',
       'Fix Cost (\% of Project)_?']
    df = df.reset_index(drop=True)
    for col in df.columns:
        if df[col].dtype == 'object':
            df[col] = pd.to_numeric(df[col])
    xgb_model_loaded = pickle.load(open('xgboost_project_risk_prediction.pickle', "rb"))
    pred = xgb_model_loaded.predict(df[:1])
    return str(pred[0])

# Define the Gradio interface with appropriate input components
iface = gr.Interface(
    fn=ml_function,
    inputs=[
        gr.Number(label="Probability"),
        gr.Number(label="Affecting No of Modules"),
        gr.Number(label="Fixing Duration (Days)"),
        gr.Radio(choices=pc, label="Project Category"),
        gr.Radio(choices=rc, label="Requirement Category"),
        gr.Radio(choices=rtc, label="Risk Target Category"),
        gr.Radio(choices=mor, label="Magnitude of Risk"),
        gr.Radio(choices=imp, label="Impact"),
        gr.Radio(choices=dor, label="Dimension of Risk"),
        gr.Slider(minimum=0, maximum=10,step=1, label="Fix Cost (% of Project)")
    ],
    outputs=[
        gr.Label(label="Risk Level")
    ]
)

# Run the Gradio app
iface.launch()