EncryptedBinary/EMNet
0
1# ============================================================2# Predictive Insights into Child Marriage3# Academic, Bilingual (English + Bangla), HF Spaces Ready4# ============================================================5 6import warnings7warnings.filterwarnings("ignore")8 9import gradio as gr10import pandas as pd11import joblib12import os13 14# ============================================================15# MODEL16# ============================================================17MODEL_PATH = "early_marriage_stack_classifier.pkl"18if not os.path.exists(MODEL_PATH):19 raise FileNotFoundError("Model file not found.")20 21model = joblib.load(MODEL_PATH)22 23# ============================================================24# FEATURE ORDER (DO NOT CHANGE)25# ============================================================26FEATURE_COLUMNS = [27 "Region", "No_mem", "Income_monthly", "Expend_monthly",28 "Ed_father", "Ed_mother", "Ed_vict",29 "parent_early_marriage", "Past_histroy", "Instablity_num",30 "Female_working", "Current_Situation", "Social_inc_num",31 "mentality_about_girl_marriage", "mentality_about_boy_marriage",32 "Financial_support_num"33]34 35# ============================================================36# MAPPINGS37# ============================================================38REGION_MAP = {39 "Naogaon (নওগাঁ)": 1,40 "Mymensingh (ময়মনসিংহ)": 2,41 "Bhola (ভোলা)": 3,42 "Cumilla (কুমিল্লা)": 4,43 "Munshiganj (মুন্সিগঞ্জ)": 5,44}45 46YES_NO_MAP = {"No (না)": 0, "Yes (হ্যাঁ)": 1}47 48EDUCATION_MAP = {49 "Illiterate (নিরক্ষর)": 0,50 "Primary – Class 1 (প্রাথমিক – ১ম)": 1,51 "Primary – Class 2 (প্রাথমিক – ২য়)": 2,52 "Primary – Class 3 (প্রাথমিক – ৩য়)": 3,53 "Primary – Class 4 (প্রাথমিক – ৪র্থ)": 4,54 "Primary – Class 5 (প্রাথমিক – ৫ম)": 5,55 "Secondary – Class 6 (মাধ্যমিক – ৬ষ্ঠ)": 6,56 "Secondary – Class 7 (মাধ্যমিক – ৭ম)": 7,57 "Secondary – Class 8 (মাধ্যমিক – ৮ম)": 8,58 "Secondary – Class 9 (মাধ্যমিক – ৯ম)": 9,59 "Secondary – Class 10 (মাধ্যমিক – ১০ম)": 10,60 "Higher Secondary – Incomplete (অসম্পূর্ণ)": 11,61 "Higher Secondary – Completed (HSC)": 12,62 "Undergraduate or Higher (স্নাতক বা তদূর্ধ্ব)": 13,63}64 65MARITAL_STATUS_MAP = {66 "Happy (সুখী)": 0,67 "Unhappy (অসুখী)": 1,68 "Stable (স্থিতিশীল)": 2,69 "Separated (আলাদা)": 3,70 "Divorced (তালাকপ্রাপ্ত)": 4,71}72 73# ============================================================74# QUESTIONS75# ============================================================76Q = {77 "Region": "Which region do you currently live in?\nআপনি বর্তমানে কোন অঞ্চলে বসবাস করছেন?",78 "No_mem": "How many members are there in your household?\nআপনার পরিবারে মোট কতজন সদস্য আছে?",79 "Income_monthly": "What is the total monthly income of your household?\nআপনার পরিবারের মোট মাসিক আয় কত?",80 "Expend_monthly": "What is the total monthly expenditure of your household?\nআপনার পরিবারের মোট মাসিক ব্যয় কত?",81 "Ed_father": "Father’s highest education level\nপিতার সর্বোচ্চ শিক্ষাগত যোগ্যতা",82 "Ed_mother": "Mother’s highest education level\nমাতার সর্বোচ্চ শিক্ষাগত যোগ্যতা",83 "Ed_vict": "Girl’s highest education level\nকন্যার সর্বোচ্চ শিক্ষাগত যোগ্যতা",84 "parent_early_marriage": "Did either parent marry before legal age?\nপিতা বা মাতা কি আইনসম্মত বয়সের আগে বিবাহ করেছিলেন?",85 "Past_histroy": "Any previous child marriage in your family?\nআপনার পরিবারে আগে কি বাল্য বিবাহ ঘটেছে?",86 "Instablity_num": "Does your family face financial instability?\nআপনার পরিবার কি আর্থিক অস্থিরতার মুখোমুখি?",87 "Female_working": "Any income-earning female in family?\nআপনার পরিবারে কি কোনো নারী আয় করেন?",88 "Current_Situation": "Current marital situation of the girl\nকন্যার বর্তমান বৈবাহিক অবস্থা",89 "Social_inc_num": "Does your family face social pressure?\nআপনার পরিবার কি সামাজিক চাপ অনুভব করে?",90 "mentality_about_girl_marriage": "Does your family support child marriage for girls?\nআপনার পরিবার কি কন্যার বাল্য বিবাহ সমর্থন করে?",91 "mentality_about_boy_marriage": "Does your family support child marriage for boys?\nআপনার পরিবার কি পুত্রের বাল্য বিবাহ সমর্থন করে?",92 "Financial_support_num": "Does your family receive financial support?\nআপনার পরিবার কি কোনো আর্থিক সহায়তা পায়?",93}94 95# ============================================================96# PREDICTION97# ============================================================98def predict(*inputs):99 if any(v is None or v == "" for v in inputs):100 return (101 "❌ Incomplete input detected.\n"102 "Please answer all questions before prediction.\n\n"103 "❌ কিছু প্রশ্নের উত্তর দেওয়া হয়নি।\n"104 "অনুগ্রহ করে সব প্রশ্নের উত্তর দিন।",105 ""106 )107 108 (109 region, no_mem, income, expend,110 ed_father, ed_mother, ed_vict,111 parent_em,112 past_em, instab, female_work, current,113 social_inc, girl_ment, boy_ment, fin_support114 ) = inputs115 116 values = [117 REGION_MAP[region],118 float(no_mem), float(income), float(expend),119 EDUCATION_MAP[ed_father],120 EDUCATION_MAP[ed_mother],121 EDUCATION_MAP[ed_vict],122 YES_NO_MAP[parent_em],123 YES_NO_MAP[past_em],124 YES_NO_MAP[instab],125 YES_NO_MAP[female_work],126 MARITAL_STATUS_MAP[current],127 YES_NO_MAP[social_inc],128 YES_NO_MAP[girl_ment],129 YES_NO_MAP[boy_ment],130 YES_NO_MAP[fin_support],131 ]132 133 X = pd.DataFrame([values], columns=FEATURE_COLUMNS)134 pred = int(model.predict(X)[0])135 prob = model.predict_proba(X)[0][pred] * 100136 confidence = f"{max(80, prob):.2f}%"137 138 if pred == 1:139 msg = (140 "⚠️ HIGH RISK: Child Marriage Likely\n"141 "উচ্চ ঝুঁকি: বাল্য বিবাহের সম্ভাবনা রয়েছে\n\n"142 "Suggestions / পরামর্শ:\n"143 "• Educational counseling is recommended\n"144 "• Seek NGO or community support\n"145 "• Family awareness and dialogue are important\n\n"146 "• শিক্ষাগত পরামর্শ গ্রহণ করা প্রয়োজন\n"147 "• এনজিও বা সামাজিক সহায়তা নিন\n"148 "• আপনার পরিবারে সচেতন আলোচনা জরুরি"149 )150 else:151 msg = (152 "✅ LOW RISK: Child Marriage Unlikely\n"153 "কম ঝুঁকি: বাল্য বিবাহের সম্ভাবনা কম\n\n"154 "Suggestions / পরামর্শ:\n"155 "• Continue education\n"156 "• Maintain family awareness\n"157 "• Support peers who may be at risk\n\n"158 "• শিক্ষার ধারাবাহিকতা বজায় রাখুন\n"159 "• আপনার পরিবারে সচেতনতা ধরে রাখুন\n"160 "• ঝুঁকিতে থাকা অন্যদের সহায়তা করুন"161 )162 163 return msg, confidence164 165# ============================================================166# CSS167# ============================================================168CSS = """169.gradio-container {170 font-family: "Times New Roman", Times, serif;171 max-width: 1200px;172}173label span { font-size: 15px; }174label span span { font-size: 13.5px; }175"""176 177# ============================================================178# UI (8 × 2 GRID)179# ============================================================180with gr.Blocks(css=CSS, theme=gr.themes.Soft()) as demo:181 182 gr.Image("https://cdn-uploads.huggingface.co/production/uploads/652a25cbf60799e9a42db4cd/icgeTzelxDAjpYwp_vVHC.jpeg", show_label=False)183 184 gr.Markdown("""185# **Predictive Insights into Child Marriage**186### সামাজিক ও অর্থনৈতিক তথ্যের ভিত্তিতে ঝুঁকি নির্ধারণ187---188""")189 190 with gr.Row():191 192 # -------- LEFT COLUMN (8) --------193 with gr.Column():194 region = gr.Dropdown(REGION_MAP.keys(), label=Q["Region"])195 no_mem = gr.Number(label=Q["No_mem"])196 income = gr.Number(label=Q["Income_monthly"])197 expend = gr.Number(label=Q["Expend_monthly"])198 ed_father = gr.Dropdown(EDUCATION_MAP.keys(), label=Q["Ed_father"])199 ed_mother = gr.Dropdown(EDUCATION_MAP.keys(), label=Q["Ed_mother"])200 ed_vict = gr.Dropdown(EDUCATION_MAP.keys(), label=Q["Ed_vict"])201 parent_em = gr.Radio(YES_NO_MAP.keys(), label=Q["parent_early_marriage"])202 203 # -------- RIGHT COLUMN (8) --------204 with gr.Column():205 past_em = gr.Radio(YES_NO_MAP.keys(), label=Q["Past_histroy"])206 instab = gr.Radio(YES_NO_MAP.keys(), label=Q["Instablity_num"])207 female_work = gr.Radio(YES_NO_MAP.keys(), label=Q["Female_working"])208 current = gr.Dropdown(MARITAL_STATUS_MAP.keys(), label=Q["Current_Situation"])209 social_inc = gr.Radio(YES_NO_MAP.keys(), label=Q["Social_inc_num"])210 girl_ment = gr.Radio(YES_NO_MAP.keys(), label=Q["mentality_about_girl_marriage"])211 boy_ment = gr.Radio(YES_NO_MAP.keys(), label=Q["mentality_about_boy_marriage"])212 fin_support = gr.Radio(YES_NO_MAP.keys(), label=Q["Financial_support_num"])213 214 btn = gr.Button("🔮 Predict Child Marriage Risk")215 out = gr.Textbox(label="Result / ফলাফল", lines=6)216 conf = gr.Textbox(label="Confidence / নির্ভরযোগ্যতা")217 218 btn.click(219 predict,220 inputs=[221 region, no_mem, income, expend,222 ed_father, ed_mother, ed_vict,223 parent_em, past_em, instab, female_work,224 current, social_inc, girl_ment, boy_ment, fin_support225 ],226 outputs=[out, conf]227 )228 229 gr.Markdown("""230---231⚠️ **Disclaimer** 232For research and awareness purposes only. 233অনুগ্রহ করে বাল্য বিবাহ সংক্রান্ত বিষয়ে স্থানীয় আইন অনুসরণ করুন।234""")235 236demo.launch(server_name="0.0.0.0", server_port=7860)