CoolFace
Apppublic

EncryptedBinary/EMNet

sourceHugging Facecc-by-4.0updated 8mo agoView on Hugging Face
0likes
app.py236 linesDownload Raw Back to root
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)