File size: 3,929 Bytes
14c67f0
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
---
license: mit
language:
- en
metrics:
- mae
- r_squared
pipeline_tag: tabular-regression
tags:
- regression
- price-prediction
---

# Model Card for Infinitode/IHPPM-OPEN-ARC

Repository: https://github.com/Infinitode/OPEN-ARC/

## Model Description

OPEN-ARC-IHPP is a CatBoostRegressor model developed as part of Infinitode's OPEN-ARC initiative. It was designed to predict accurate price points for India house and property rentals based on various factors.

**Architecture**:

- **CatBoostRegressor**: `iterations=2500`, `depth=10`, `learning_rate=0.045`, `loss_function="MAE"`, `eval_metric="MAE"`, `random_seed=42`, `verbose=200`.
- **Framework**: CatBoost
- **Training Setup**: Trained with 2500 iterations on the dataset split.

## Uses

- Predicting accurate price points for properties in India.
- Validating or measuring existing price points for properties.
- Researching property value and factors that influence price.

## Limitations

- May generate implausible or inappropriate results when influenced by extreme outlier values.
- Could provide inaccurate prices; caution is advised when relying on these outputs.

## Training Data

- Dataset: India House Rent Prediction dataset from Kaggle.
- Source URL: https://www.kaggle.com/datasets/pranavshinde36/india-house-rent-prediction
- Content: House type, locality, city, area, furnishing and room specifics along with the target rent value. 
- Size: 7691 entries of properties in India.
- Preprocessing: Removed tiny area properties, extreme rent outliers, and `area_rate`. Also created "area buckets" for better performance.

## Training Procedure

- Metrics: MAE, R-squared
- Train/Testing Split: 85% train, 15% testing.

## Evaluation Results

| Metric | Value |
| ------ | ----- |
| Testing MAE | 3.86k |
| Testing R-squared | 0.9351 |

## How to Use

```python
def predict_user_rent(model, raw_df):
    print("\n\n========== RENT PREDICTION ASSISTANT ==========\n")
    print("Choose values for each feature below. For categorical vars, pick a number.\n")

    sample = {}

    # Menu
    def choose_cat(col_name):
        unique_vals = sorted(raw_df[col_name].unique())
        print(f"\n--- {col_name} ---")
        for idx, val in enumerate(unique_vals):
            print(f"{idx + 1}. {val}")
        sel = int(input("Enter your choice number: ")) - 1
        return unique_vals[sel]

    # Categorical
    sample["house_type"] = choose_cat("house_type")
    sample["locality"] = choose_cat("locality")
    sample["city"] = choose_cat("city")
    sample["furnishing"] = choose_cat("furnishing")

    # Numeric values
    def choose_num(col_name):
        return float(input(f"\nEnter value for {col_name}: "))

    sample["area"] = choose_num("area")
    sample["beds"] = choose_num("beds")
    sample["bathrooms"] = choose_num("bathrooms")
    sample["balconies"] = choose_num("balconies")

    # area bucket
    area_val = sample["area"]
    area_bins = [0, 300, 600, 900, 1200, 2000, 5000, 100000]
    area_bucket = np.digitize([area_val], area_bins)[0] - 1
    sample["area_bucket"] = area_bucket

    # placeholder for rent_psf bucket (we don't know rent yet)
    # so we use area only as a proxy for typical price density
    sample["rent_psf_bucket"] = min(int(area_bucket), 19)

    df_input = pd.DataFrame([sample])

    # Must match training encodings
    for col in ["house_type", "locality", "city", "furnishing"]:
        df_input[col] = df_input[col].astype(raw_df[col].dtype)

    # Prediction
    pred_log = model.predict(df_input)[0]
    pred_rent = np.expm1(pred_log)

    print("\n===================================")
    print(f"Estimated Rent: ₹ {pred_rent:,.2f}")
    print("===================================\n")

    return pred_rent

# Uncomment to use interactively:
# predict_user_rent(model, df)
```

## Contact

For questions or issues, open a GitHub issue or reach out at https://infinitode.netlify.app/forms/contact.