File size: 5,571 Bytes
a48e129
9b24c9c
a48e129
9b24c9c
a48e129
 
9b24c9c
a48e129
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
127
128
129
130
131
132
133
134
135
136
137
138
import random
import gradio as gr
from joblib import load

# Model URL for each
rf_model_url = 'random_forest_model.joblib'


# Load Model method
def load_model(url):
    return load(rf_model_url)


def bool_value(val):
    if not val:
        return 0
    else:
        return 1


def gender(val):
    if val == 'Male':
        return 1
    elif val == 'Female':
        return 0
    else:
        return 2


def race(val):
    if val == 'Hispanic':
        return 2
    elif val == 'Black':
        return 1
    elif val == 'White':
        return 5
    elif val == 'Other':
        return 4
    elif val == 'Asian':
        return 0
    else:
        return 3


def search_outcome(val, end_range):
    if not val:
        return 2  # Which mean no search was conducted
    else:
        return random.randrange(0, end_range)


def search_reason(val, end_range):
    if not val:
        return 726  # Which mean no search was conducted
    else:
        return random.randrange(0, end_range)


# Make Prediction Model but would also like to add Gender and Race
def make_predication(year_stopped, offences, search, doc, car_year, alcohol, safety, genders, speeding,
                     races, accident, actual_accident, damage, road_signs, injury, belt, disobedience, bad_driving,
                     phone):
    input_features = {
        'encoded_Search Outcome': search_outcome(search, 6),
        'encoded_Search Reason For Stop': search_reason(search, 727),
        'Number Of Offences': offences,
        'Search Conducted': bool_value(search),
        'Year Stopped': year_stopped,
        'encoded_SubAgency': random.randrange(0, 7),
        'encoded_Arrest Type': random.randrange(0, 18),
        'Invalid Documentation': bool_value(doc),
        'Year': car_year,  # int
        'encoded_Driver City': random.randrange(0, 8114),  # int
        'encoded_Make': random.randrange(0, 57),  # int
        'Alcohol': bool_value(alcohol),  # bool
        'encoded_Color': random.randrange(0, 25),  # int
        'Vehicle Safety And Standards': bool_value(safety),  # bool
        'Speeding': bool_value(speeding),
        'encoded_Race': race(races),
        'Contributed To Accident': bool_value(accident),
        'Accident': bool_value(actual_accident),
        'encoded_VehicleType': random.randrange(0, 31),
        'Property Damage': bool_value(damage),
        'Road Signs And Markings': bool_value(road_signs),
        'Personal Injury': bool_value(injury),
        'encoded_Gender': gender(genders),
        'Belts': bool_value(belt),
        'Disobedience': bool_value(disobedience),
        'encoded_DL State': random.randrange(0, 70),
        'encoded_State': random.randrange(0, 68),
        'Negligent Driving': bool_value(bad_driving),
        'encoded_Driver State': random.randrange(0, 67),
        'Mobile Phone': bool_value(phone)
    }

    x_input_feature = [[input_features[feature] for feature in sorted(input_features)]]
    rfc_model = load_model(rf_model_url)
    prd = rfc_model.predict(x_input_feature)

    if prd == 0:
        return 'Citation'
    elif prd == 1:
        return 'SERO'
    else:
        return 'Warning'


iface = gr.Interface(fn=make_predication,
                     inputs=[gr.components.Slider(minimum=2010, maximum=2023, step=1, label='Citation Year'),
                             gr.components.Slider(minimum=1, step=1, label='Number of offences found for stop'),
                             gr.components.Checkbox(label='Was a search conducted'),
                             gr.components.Checkbox(label='Any invalid documents'),
                             gr.components.Slider(minimum=1990, maximum=2023, step=1, label='Make Year'),
                             gr.components.Checkbox(label='Was alcohol involved'),
                             gr.components.Checkbox(label='Safety Standard issues in Vehicle'),
                             gr.components.Dropdown(label='Gender', choices=['Female',
                                                                             'Male',
                                                                             'Unknown']),
                             gr.components.Checkbox(label='Speeding'),
                             gr.components.Dropdown(label='Race', choices=['Asian',
                                                                           'Black',
                                                                           'Hispanic',
                                                                           'Native American',
                                                                           'Other',
                                                                           'White']),
                             gr.components.Checkbox(label='Irregularities which could contribute to accident'),
                             gr.components.Checkbox(label='Was the stop actual for an accident'),
                             gr.components.Checkbox(label='Any Property damage'),
                             gr.components.Checkbox(label='Road sign violation involvement'),
                             gr.components.Checkbox(label='Any injuries'),
                             gr.components.Checkbox(label='Seat Belts irregulation'),
                             gr.components.Checkbox(label='Any disobedience'),
                             gr.components.Checkbox(label='Bad driving'),
                             gr.components.Checkbox(label='Mobile phone')],
                     outputs=["text"])

iface.launch(debug=True)