A bank spends up to three business days on collateral valuation per application: collecting comparables, adjustments, and approvals. We reduce this to five seconds using an ensemble of LightGBM, GWR, and embedding-based comps search for automated valuation (AVM). A 5% error in collateral valuation can cost the bank millions in case of default. Therefore, automation demands not only accuracy but also interpretability—understanding why the model valued an apartment at 8 million rather than 7.5. We use geographically weighted regression (GWR) to account for local market peculiarities—the difference between the Lyublino and Khamovniki districts cannot be described by a single constant. Over years of practice, we have deployed AVM in three major banks and two agencies. This article covers technical details: from geodata collection to quantile regression for confidence intervals. Get an engineer's consultation to discuss your project—we will help choose the optimal architecture.
How does an AI-based automated valuation system save time?
The classic hedonic pricing model (log-linear regression) provides interpretable coefficients but fails to capture non-linearities: for example, a first-floor apartment is not proportionally cheaper but has a price drop. Gradient boosting (LightGBM/XGBoost) handles this automatically. For cities with strong spatial price stratification, we add Geographically Weighted Regression (GWR)—the model coefficients vary spatially. Finally, we assemble an ensemble:
final_price = ( 0.4 * lgbm_prediction + 0.3 * gwr_prediction + 0.2 * nearest_comps_weighted_avg + 0.1 * price_per_sqm_neighborhood_median * area ) What data do we collect?
Property characteristics:
- Area: total, living, kitchen
- Rooms: count, type (separate/adjacent)
- Floor and total floors
- Year built, wall material (brick/panel/monolith)
- Renovation condition (none/needed/good/euro)
- Balcony/loggia, area
Location factors:
location_features = { 'distance_metro_m': distance_to_nearest_metro_station, 'distance_center_km': distance_to_city_center, 'walk_score': walkability_score, 'school_rating': nearest_school_average_rating, 'green_area_500m': green_area_within_500m_sqkm, 'crime_index': neighborhood_crime_rate, 'noise_level_db': estimated_noise_level, 'view_type': encode(['yard', 'street', 'park', 'water']) } Market data:
- Comparable sales (comps): transactions of similar properties in the last 6–12 months
- Days on market for active listings
- Price per sqm trend in the neighborhood
Sources: Rosreestr (EGRN via API or open data), CIAN/Avito/Yandex Realty (parsing or official API), OpenStreetMap for infrastructure, 2GIS for organizations and transport accessibility.
How do we find comps?
The traditional approach takes 3–5 similar properties and adjusts. AI-comps works more accurately:
- Transform each property into an embedding (characteristics + geocoordinates).
- Search KNN nearest sold properties.
- Weight by similarity, recency, and adjustments.
def find_comparable_properties(subject_property, sold_database, n_comps=10): subject_embedding = property_encoder.encode(subject_property) comp_embeddings = [property_encoder.encode(p) for p in sold_database] # Cosine similarity + distance penalty + recency weight similarities = cosine_similarity(subject_embedding, comp_embeddings) recency_weights = exp(-days_since_sale / 180) scores = similarities * recency_weights return sold_database[top_n_indices(scores, n_comps)] Advanced comps search
To increase accuracy, we add weighting by adjustments (age, condition, floor) and a 2 km radius filter. When analogs are insufficient, we expand the radius and lower the confidence score.Confidence Score: assessing prediction reliability
An estimate without a confidence interval is a risk. For mortgages, it is especially important to know how much to trust the number. We use three components:
- Number of comps within 500 m radius in the last 12 months.
- Neighborhood homogeneity (std price/sqm).
- Property uniqueness (distance to cluster centroid).
We calculate the prediction interval using quantile regression: p10/p50/p90. If the range p90−p10 exceeds 30% of p50, confidence is low, and a manual inspection is recommended.
Why is confidence score critical for banks?
Central Bank of Russia Regulation 602-P requires documented methodology and backtesting. The confidence score allows automatic rejection of unreliable estimates (score < 0.6) and routing to physical inspection. Average savings for a bank: up to 70% of employee time, reducing operational costs by 2–3 million rubles per year.
Deployment for banks
Solutions come in two types:
- Batch processing: upload a list of properties, get estimates.
- Real-time API: one property, response in <1 second.
We always set a confidence threshold: at score <0.6, auto-valuation is declined, and the property is sent for physical inspection. We account for regulatory requirements: CBR 602-P, IFRS 13 (Fair Value Measurement). We prepare methodology and backtesting.
Example API architecture: FastAPI with JWT authentication, logs to ELK, model loaded in ONNX Runtime. Containerized with Docker, orchestrated with Kubernetes.
| Component | Technology | Purpose |
|---|---|---|
| Embedding | Hugging Face + coordinates | Comps search |
| Model | LightGBM + GWR | Ensemble |
| Confidence | Quantile regression | Reliability assessment |
| API | FastAPI + Docker | Interaction |
What is included in the final product?
We deliver the project fully:
- Documentation of methodology and backtesting results.
- API (REST/gRPC) with authentication and logging.
- Access to Git repository with code and models.
- Training of the client's team (2 days).
- 3 months of post-launch support.
Metrics and experience—AI system development
Typical production metrics:
- MAPE: 7-10% for Moscow, 10-15% for regions.
- Median APE: 5-8%.
- Coverage ratio: % of properties with auto-valuation (no manual inspection).
- False coverage rate: % of auto-valuations with error >20%.
We guarantee transparency—you receive a model card and all decision rules.
Comparison of machine learning methods for AVM
| Method | Accuracy | Interpretability | Speed | Application |
|---|---|---|---|---|
| Hedonic regression | Medium | High | High | Basic baseline |
| Gradient boosting | High | Low | Medium | Primary model |
| GWR | High | Medium | Low | Spatial modeling |
| Ensemble | Very high | Low | Medium | Final prediction |
AVM implementation process: 5 steps
- Client data analysis (2–4 weeks)
- Data collection and cleaning (2–4 weeks)
- Model development and training (4–6 weeks)
- Testing and backtesting (2 weeks)
- Deployment and team training (2 weeks)
Contact us to order AVM development for your tasks. Get a consultation from an engineer, not a manager.







