🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
192 lines
4.6 KiB
Markdown
192 lines
4.6 KiB
Markdown
---
|
|
id: "RF-ML-002"
|
|
title: "Prediccion de Tiempo de Venta"
|
|
type: "Functional Requirement"
|
|
epic: "IAI-008"
|
|
priority: "Alta"
|
|
status: "Draft"
|
|
project: "inmobiliaria-analytics"
|
|
created_date: "2026-01-04"
|
|
updated_date: "2026-01-04"
|
|
---
|
|
|
|
# RF-IA-008-002: Prediccion de Tiempo de Venta
|
|
|
|
---
|
|
|
|
## Descripcion
|
|
|
|
El sistema debe predecir cuantos dias tardara una propiedad en venderse (Days on Market - DOM) basandose en caracteristicas de la propiedad, precio de lista y condiciones de mercado.
|
|
|
|
---
|
|
|
|
## Justificacion
|
|
|
|
Conocer el tiempo estimado de venta permite a agentes establecer expectativas realistas con clientes, ajustar estrategias de pricing, y a inversores evaluar liquidez de inversiones.
|
|
|
|
---
|
|
|
|
## Requisitos Funcionales
|
|
|
|
### RF-002.1: Prediccion DOM
|
|
|
|
| ID | Requisito | Prioridad |
|
|
|----|-----------|-----------|
|
|
| RF-002.1.1 | El sistema debe predecir dias estimados en mercado | Alta |
|
|
| RF-002.1.2 | El sistema debe proporcionar intervalo de confianza | Alta |
|
|
| RF-002.1.3 | El sistema debe calcular probabilidades de venta a 30/60/90 dias | Alta |
|
|
| RF-002.1.4 | El sistema debe considerar estacionalidad | Media |
|
|
|
|
### RF-002.2: Features Criticas
|
|
|
|
| ID | Requisito | Prioridad |
|
|
|----|-----------|-----------|
|
|
| RF-002.2.1 | El modelo debe usar ratio precio/mercado como feature principal | Alta |
|
|
| RF-002.2.2 | El modelo debe considerar inventario activo en zona | Alta |
|
|
| RF-002.2.3 | El modelo debe considerar absorcion historica | Alta |
|
|
| RF-002.2.4 | El modelo debe evaluar calidad del listing (fotos, descripcion) | Media |
|
|
|
|
### RF-002.3: Actualizacion
|
|
|
|
| ID | Requisito | Prioridad |
|
|
|----|-----------|-----------|
|
|
| RF-002.3.1 | El sistema debe recalcular prediccion si cambia precio | Alta |
|
|
| RF-002.3.2 | El sistema debe ajustar prediccion con dias transcurridos | Media |
|
|
| RF-002.3.3 | El sistema debe aprender de ventas reales | Alta |
|
|
|
|
---
|
|
|
|
## Features del Modelo
|
|
|
|
### Propiedad
|
|
|
|
| Feature | Tipo | Importancia |
|
|
|---------|------|-------------|
|
|
| precio_lista | float | Alta |
|
|
| precio_vs_mercado_ratio | float | Critica |
|
|
| tipo_propiedad | categorical | Alta |
|
|
| superficie_m2 | float | Media |
|
|
| antiguedad_anos | int | Media |
|
|
| calidad_fotos_score | float | Alta |
|
|
| descripcion_quality_score | float | Media |
|
|
| tiene_tour_virtual | boolean | Media |
|
|
|
|
### Mercado
|
|
|
|
| Feature | Tipo | Importancia |
|
|
|---------|------|-------------|
|
|
| inventario_activo_zona | int | Alta |
|
|
| absorcion_mensual_zona | float | Alta |
|
|
| tendencia_demanda_zona | float | Alta |
|
|
| competencia_precio_similar | int | Alta |
|
|
| estacionalidad_mes | int | Media |
|
|
|
|
---
|
|
|
|
## Arquitectura del Modelo
|
|
|
|
```yaml
|
|
modelo:
|
|
tipo: Survival Analysis
|
|
componentes:
|
|
- modelo: CoxProportionalHazards
|
|
uso: "Baseline, interpretable"
|
|
|
|
- modelo: RandomSurvivalForest
|
|
uso: "Captura no-linealidades"
|
|
hiperparametros:
|
|
n_estimators: 200
|
|
max_depth: 10
|
|
|
|
target: dias_en_mercado
|
|
censoring: propiedades_aun_activas
|
|
|
|
output:
|
|
dias_estimados: median_survival_time
|
|
probabilidades:
|
|
- p_venta_30d: survival_function(30)
|
|
- p_venta_60d: survival_function(60)
|
|
- p_venta_90d: survival_function(90)
|
|
```
|
|
|
|
---
|
|
|
|
## API Endpoints
|
|
|
|
```yaml
|
|
POST /api/v1/ml/predictions/time-to-sell:
|
|
description: Prediccion de tiempo de venta
|
|
request:
|
|
property:
|
|
type: string
|
|
price: number
|
|
construction_m2: number
|
|
latitude: number
|
|
longitude: number
|
|
listing_quality:
|
|
photos_count: integer
|
|
has_virtual_tour: boolean
|
|
response:
|
|
estimated_days: integer
|
|
confidence_interval:
|
|
min: integer
|
|
max: integer
|
|
probabilities:
|
|
sell_30_days: number
|
|
sell_60_days: number
|
|
sell_90_days: number
|
|
factors:
|
|
- factor: string
|
|
impact: string # "accelerates" | "delays"
|
|
magnitude: number
|
|
recommendations:
|
|
- recommendation: string
|
|
potential_improvement_days: integer
|
|
```
|
|
|
|
---
|
|
|
|
## Metricas de Calidad
|
|
|
|
```yaml
|
|
metricas:
|
|
objetivo:
|
|
C_index: ">= 0.75"
|
|
MAPE: "< 25%"
|
|
|
|
segmentacion:
|
|
- accuracy_por_rango_precio
|
|
- accuracy_por_tipo_propiedad
|
|
- accuracy_por_zona
|
|
```
|
|
|
|
---
|
|
|
|
## Criterios de Aceptacion
|
|
|
|
- [ ] C-index >= 0.75 en test set
|
|
- [ ] MAPE < 25% en propiedades vendidas
|
|
- [ ] Probabilidades calibradas correctamente
|
|
- [ ] Latencia < 100ms por prediccion
|
|
- [ ] Recomendaciones generadas automaticamente
|
|
- [ ] Modelo se actualiza con ventas reales
|
|
|
|
---
|
|
|
|
## Dependencias
|
|
|
|
- IA-008-001 (AVM): Para ratio precio/mercado
|
|
- IA-007 (Webscraper): Datos de listings
|
|
- lifelines o scikit-survival
|
|
|
|
---
|
|
|
|
## Historias de Usuario Relacionadas
|
|
|
|
- US-ML-003: Prediccion dias en mercado
|
|
|
|
---
|
|
|
|
**Autor:** ML Lead
|
|
**Fecha:** 2026-01-04
|