--- license: mit language: - en metrics: - precision - recall - f1 - accuracy - roc_auc pipeline_tag: tabular-classification tags: - classification - psychology --- # Model Card for Infinitode/BPPM-OPEN-ARC Repository: https://github.com/Infinitode/OPEN-ARC/ ## Model Description OPEN-ARC-BPP is a simple XGBClassifier model developed as part of Infinitode's OPEN-ARC initiative. It was designed to determine a person's basic personality type (introvert/extrovert) based on several personal questions. **Architecture**: - **XGBClassifer**: `n_estimators=200`, `learning_rate=0.1`, `max_depth=4`, `eval_metric="logloss"`, `use_label_encoder=False`, `random_state=42`. - **Framework**: XGBoost - **Training Setup**: Trained using selected params. ## Uses - Identifying a person's basic personality type through a series of personal questions. - Enhancing knowledge and research in psychology and human behavior. ## Limitations - Might lead to inaccurate evaluations of personality types because of exceptions and inconsistencies. ## Training Data - Dataset: Personality Dataset (introvert or Extrovert) dataset from Kaggle. - Source URL: https://www.kaggle.com/datasets/hardikchhipa28/personality-dataset-introvert-or-extrovert - Content: Personality-determining features such as hours spent alone per day, etc. - Size: The size is unknown as the dataset is no longer publicly available. - Preprocessing: Preprocessing involved techniques such as number and category imputation, one-hot encoding, and label encoding. ## Training Procedure - Metrics: accuracy, precision, recall, F1, ROC AUC - Train/Testing Split: 75% train, 25% testing. ## Evaluation Results | Metric | Value | | ------ | ----- | | Testing Accuracy | 92.0% | | Testing Weighted Average Precision | 92% | | Testing Weighted Average Recall | 92% | | Testing Weighted Average F1 | 92% | | Testing ROC AUC | 95.5% | ## How to Use ```python import joblib import pandas as pd import numpy as np # Load artifacts art = joblib.load("personality_artifacts.pkl") model = art["model"] num_imputer = art["num_imputer"] cat_imputer = art["cat_imputer"] ohe = art["ohe"] le = art["label_encoder"] num_cols = art["num_cols"] cat_cols = art["cat_cols"] def ask(prompt, cast=str, options=None): """Tiny helper to get clean input.""" while True: try: val = cast(input(prompt)) if options and val not in options: raise ValueError(f"Must be one of {options}") return val except Exception as e: print(f"Error: {e}. Try again.\n") def predict_personality(): print("\n🎭 Introvert vs Extrovert Predictor") print("Answer a few quick questions:\n") # Gather answers answers = { "Time_spent_Alone": ask("Hours spent alone per day (0‑24): ", float), "Stage_fear": ask("Stage fear? (Yes/No): ", str.title, ["Yes", "No"]), "Social_event_attendance":ask("Social events per week (0‑10): ", int), "Going_outside": ask("Trips outside per day (0‑10): ", int), "Drained_after_socializing": ask("Feel drained after socializing? (Yes/No): ", str.title, ["Yes", "No"]), "Friends_circle_size": ask("Number of close friends (0‑30): ", int), "Post_frequency": ask("Social‑media posts per week (0‑30): ", int), } # Build one‑row DataFrame in correct column order row = pd.DataFrame([answers])[num_cols + cat_cols] # --- Re‑run exact preprocessing ------------------------------------------------- X_num = num_imputer.transform(row[num_cols]) X_cat = cat_imputer.transform(row[cat_cols]) X_cat_enc = ohe.transform(X_cat) X_ready = np.hstack([X_num, X_cat_enc]) # --- Predict -------------------------------------------------------------------- proba = model.predict_proba(X_ready)[0] idx = proba.argmax() pred_label = le.inverse_transform([idx])[0] confidence = proba[idx] print(f"\n🔮 You are likely an **{pred_label}** (confidence {confidence:.0%}).") predict_personality() ``` ## Contact For questions or issues, open a GitHub issue or reach out at https://infinitode.netlify.app/forms/contact.