workspace-v1/shared/knowledge-base/projects/inmobiliaria-analytics/ML-SERVICES-SPEC.yml
rckrdmrd cb4c0681d3 feat(workspace): Add new projects and update architecture
New projects created:
- michangarrito (marketplace mobile)
- template-saas (SaaS template)
- clinica-dental (dental ERP)
- clinica-veterinaria (veterinary ERP)

Architecture updates:
- Move catalog from core/ to shared/
- Add MCP servers structure and templates
- Add git management scripts
- Update SUBREPOSITORIOS.md with 15 new repos
- Update .gitignore for new projects

Repository infrastructure:
- 4 main repositories
- 11 subrepositorios
- Gitea remotes configured

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-07 04:43:28 -06:00

1468 lines
44 KiB
YAML

# ============================================================================
# ESPECIFICACION: Servicios ML para Analytics Inmobiliario SaaS
# ============================================================================
# Fecha: 2026-01-04
# Version: 1.0.0
# Autor: ML-Specialist-Agent
# Dominio: Real Estate Analytics / Proptech
# Tipo: Documento de Especificacion Tecnica
# ============================================================================
metadata:
proyecto: inmobiliaria-analytics-saas
version: "1.0.0"
fecha_creacion: "2026-01-04"
autor: "ML-Specialist-Agent"
estado: "draft"
categoria: "ML/AI Services"
referencias:
- "PERFIL-ML-SPECIALIST.md"
- "SIMCO-ML.md"
- "trading-platform/apps/ml-engine (patron de referencia)"
# ============================================================================
# 1. MODELOS DE PREDICCION
# ============================================================================
modelos_prediccion:
# --------------------------------------------------------------------------
# 1.1 Prediccion de Precios de Propiedades (AVM - Automated Valuation Model)
# --------------------------------------------------------------------------
prediccion_precios:
nombre: "PropertyPricePredictor"
alias: "AVM-Core"
tipo: "regression"
descripcion: |
Modelo de valuacion automatica de propiedades basado en caracteristicas
fisicas, ubicacion, mercado y comparables cercanos.
features:
intrinsecas:
- nombre: "superficie_construida_m2"
tipo: float
importancia: "alta"
- nombre: "superficie_terreno_m2"
tipo: float
importancia: "alta"
- nombre: "num_recamaras"
tipo: int
importancia: "media"
- nombre: "num_banos"
tipo: float # Permite 1.5, 2.5 banos
importancia: "media"
- nombre: "num_estacionamientos"
tipo: int
importancia: "media"
- nombre: "antiguedad_anos"
tipo: int
importancia: "alta"
- nombre: "tipo_propiedad"
tipo: categorical # casa, depto, terreno, local, bodega
importancia: "alta"
- nombre: "estado_conservacion"
tipo: ordinal # 1-5 (malo a excelente)
importancia: "media"
- nombre: "tiene_alberca"
tipo: boolean
importancia: "baja"
- nombre: "tiene_jardin"
tipo: boolean
importancia: "baja"
- nombre: "nivel_piso"
tipo: int # Para departamentos
importancia: "media"
- nombre: "amenidades_count"
tipo: int
importancia: "media"
ubicacion:
- nombre: "latitud"
tipo: float
importancia: "alta"
- nombre: "longitud"
tipo: float
importancia: "alta"
- nombre: "codigo_postal"
tipo: categorical
importancia: "alta"
- nombre: "colonia_cluster_id"
tipo: int
importancia: "alta"
- nombre: "distancia_centro_m"
tipo: float
importancia: "media"
- nombre: "distancia_metro_m"
tipo: float
importancia: "media"
- nombre: "distancia_hospital_m"
tipo: float
importancia: "baja"
- nombre: "distancia_escuela_m"
tipo: float
importancia: "media"
- nombre: "indice_seguridad_zona"
tipo: float # 0-100
importancia: "alta"
- nombre: "nivel_socioeconomico_zona"
tipo: ordinal # A, B, C+, C, D+, D, E
importancia: "alta"
mercado:
- nombre: "precio_promedio_m2_zona"
tipo: float
importancia: "alta"
- nombre: "tendencia_precios_12m"
tipo: float # % cambio
importancia: "alta"
- nombre: "oferta_activa_zona"
tipo: int
importancia: "media"
- nombre: "absorcion_promedio_zona"
tipo: float # meses
importancia: "alta"
- nombre: "tasa_ocupacion_zona"
tipo: float
importancia: "media"
derivadas:
- nombre: "precio_m2_comparables"
tipo: float
derivacion: "Promedio ponderado de 5 propiedades similares cercanas"
- nombre: "desviacion_comparables"
tipo: float
derivacion: "Std dev de precios de comparables"
- nombre: "premium_ubicacion"
tipo: float
derivacion: "Factor de ajuste por ubicacion premium"
algoritmos_candidatos:
- nombre: "XGBoost"
pros: ["Mejor performance general", "Feature importance nativa", "Manejo de missing values"]
contras: ["Requiere tuning", "No extrapola bien"]
recomendado: true
- nombre: "LightGBM"
pros: ["Rapido entrenamiento", "Bajo uso memoria", "Bueno con categoricas"]
contras: ["Sensible a overfitting con pocos datos"]
recomendado: true
- nombre: "CatBoost"
pros: ["Excelente con categoricas", "Menos overfitting"]
contras: ["Mas lento que LightGBM"]
recomendado: false
- nombre: "Neural Network"
pros: ["Puede capturar patrones complejos"]
contras: ["Requiere mucho dato", "Caja negra", "Overengineering para este caso"]
recomendado: false
metricas_objetivo:
mape: "< 10%" # Mean Absolute Percentage Error
r2_score: ">= 0.85"
rmse: "< 15% del precio medio"
arquitectura:
ensemble: true
modelos:
- modelo_base: "XGBoost"
peso: 0.5
- modelo_base: "LightGBM"
peso: 0.3
- modelo_base: "ElasticNet" # Para regularizacion
peso: 0.2
api_endpoints:
- path: "/api/v1/valuation/predict"
method: "POST"
descripcion: "Valuacion de propiedad individual"
request_schema: "PropertyValuationRequest"
response_schema: "PropertyValuationResponse"
- path: "/api/v1/valuation/batch"
method: "POST"
descripcion: "Valuacion de multiples propiedades"
- path: "/api/v1/valuation/explain"
method: "POST"
descripcion: "Valuacion con explicabilidad (SHAP)"
# --------------------------------------------------------------------------
# 1.2 Prediccion de Tiempo de Venta (Days on Market)
# --------------------------------------------------------------------------
prediccion_tiempo_venta:
nombre: "TimeToSellPredictor"
alias: "DOM-Predictor"
tipo: "regression"
descripcion: |
Predice cuantos dias tardara una propiedad en venderse basado en
caracteristicas, precio y condiciones de mercado.
features:
propiedad:
- nombre: "precio_lista"
tipo: float
importancia: "alta"
- nombre: "precio_vs_mercado_ratio"
tipo: float
importancia: "critica"
descripcion: "Precio lista / Precio promedio zona"
- nombre: "tipo_propiedad"
tipo: categorical
importancia: "alta"
- nombre: "superficie_m2"
tipo: float
importancia: "media"
- nombre: "antiguedad_anos"
tipo: int
importancia: "media"
- nombre: "calidad_fotos"
tipo: ordinal # ML scoring de imagenes
importancia: "alta"
- nombre: "tiene_tour_virtual"
tipo: boolean
importancia: "media"
- nombre: "descripcion_calidad_score"
tipo: float # NLP score
importancia: "media"
mercado:
- nombre: "inventario_activo_zona"
tipo: int
importancia: "alta"
- nombre: "absorcion_mensual_zona"
tipo: float
importancia: "alta"
- nombre: "estacionalidad_mes"
tipo: int # 1-12
importancia: "media"
- nombre: "tendencia_demanda_zona"
tipo: float
importancia: "alta"
- nombre: "competencia_precio_similar"
tipo: int
importancia: "alta"
agente:
- nombre: "experiencia_agente_anos"
tipo: int
importancia: "media"
- nombre: "ventas_previas_agente"
tipo: int
importancia: "media"
- nombre: "calificacion_agente"
tipo: float
importancia: "media"
algoritmos_candidatos:
- nombre: "Survival Analysis (Cox PH)"
pros: ["Modela censura correctamente", "Interpretable"]
contras: ["Asume proporcionalidad"]
recomendado: true
- nombre: "Random Survival Forest"
pros: ["No asume proporcionalidad", "Captura no-linealidades"]
contras: ["Menos interpretable"]
recomendado: true
- nombre: "XGBoost Regressor"
pros: ["Simple", "Buen performance"]
contras: ["No maneja censura nativamente"]
recomendado: false
metricas_objetivo:
c_index: ">= 0.75" # Concordance Index
mape: "< 25%" # Dias predichos vs reales
output:
- dias_estimados: int
- intervalo_confianza: "[min_dias, max_dias]"
- probabilidad_venta_30_dias: float
- probabilidad_venta_60_dias: float
- probabilidad_venta_90_dias: float
# --------------------------------------------------------------------------
# 1.3 Prediccion de Demanda por Zona
# --------------------------------------------------------------------------
prediccion_demanda:
nombre: "ZoneDemandPredictor"
alias: "Demand-Forecaster"
tipo: "time_series_forecasting"
descripcion: |
Pronostico de demanda inmobiliaria por zona geografica
usando series temporales y factores externos.
features:
historicas:
- nombre: "busquedas_zona_30d"
tipo: int
importancia: "alta"
- nombre: "visitas_propiedades_30d"
tipo: int
importancia: "alta"
- nombre: "contactos_agentes_30d"
tipo: int
importancia: "alta"
- nombre: "ventas_cerradas_30d"
tipo: int
importancia: "critica"
- nombre: "precio_promedio_30d"
tipo: float
importancia: "alta"
externas:
- nombre: "tasa_interes_hipotecaria"
tipo: float
importancia: "alta"
- nombre: "indice_confianza_consumidor"
tipo: float
importancia: "media"
- nombre: "crecimiento_empleo_zona"
tipo: float
importancia: "media"
- nombre: "proyectos_infraestructura_cerca"
tipo: int
importancia: "alta"
- nombre: "indice_google_trends_zona"
tipo: float
importancia: "media"
estacionales:
- nombre: "mes_ano"
tipo: int
importancia: "alta"
- nombre: "trimestre"
tipo: int
importancia: "alta"
- nombre: "es_temporada_alta"
tipo: boolean
importancia: "media"
algoritmos_candidatos:
- nombre: "Prophet (Facebook)"
pros: ["Facil de usar", "Maneja estacionalidad", "Robusto a outliers"]
contras: ["No captura dependencias complejas"]
recomendado: true
- nombre: "LSTM"
pros: ["Captura patrones complejos", "Bueno con secuencias largas"]
contras: ["Requiere mucho dato", "Dificil de tunar"]
recomendado: false
- nombre: "XGBoost + Features temporales"
pros: ["Simple", "Permite features externas facilmente"]
contras: ["No modela dependencia temporal nativamente"]
recomendado: true
- nombre: "ARIMA/SARIMA"
pros: ["Clasico", "Interpretable"]
contras: ["No maneja features externas bien"]
recomendado: false
metricas_objetivo:
mape: "< 15%"
directional_accuracy: ">= 70%"
horizontes_prediccion:
- 7_dias
- 30_dias
- 90_dias
- 180_dias
# ============================================================================
# 2. ANALISIS DE OPORTUNIDADES
# ============================================================================
analisis_oportunidades:
# --------------------------------------------------------------------------
# 2.1 Deteccion de Propiedades Subvaluadas
# --------------------------------------------------------------------------
deteccion_subvaluadas:
nombre: "UndervaluedPropertyDetector"
alias: "Deal-Finder"
tipo: "anomaly_detection"
descripcion: |
Identifica propiedades cuyo precio de lista esta significativamente
por debajo del valor de mercado estimado.
metodologia:
paso_1: "Calcular valor de mercado con AVM"
paso_2: "Comparar precio_lista vs valor_mercado"
paso_3: "Calcular z-score de la diferencia"
paso_4: "Filtrar donde (valor_mercado - precio_lista) / valor_mercado > umbral"
paso_5: "Validar con comparables recientes"
umbrales:
oportunidad_moderada: ">= 10%" # Descuento sobre valor mercado
oportunidad_alta: ">= 15%"
oportunidad_excepcional: ">= 20%"
filtros_calidad:
- "Propiedad activa (no vendida)"
- "Antigedad publicacion < 30 dias"
- "Confianza AVM > 0.75"
- "No es foreclosure o venta forzada"
output_schema:
propiedad_id: string
precio_lista: float
valor_mercado_estimado: float
descuento_pct: float
nivel_oportunidad: "moderada | alta | excepcional"
confianza_estimacion: float
factores_descuento:
- factor: string
impacto: float
comparables_cercanos: list
alertas:
- tipo: "nueva_oportunidad"
trigger: "Nueva propiedad con descuento >= 15%"
canales: ["email", "push", "dashboard"]
- tipo: "cambio_precio"
trigger: "Propiedad existente baja precio >10%"
canales: ["email", "push"]
# --------------------------------------------------------------------------
# 2.2 Identificacion de Zonas Emergentes
# --------------------------------------------------------------------------
zonas_emergentes:
nombre: "EmergingZoneIdentifier"
alias: "Zone-Spotter"
tipo: "clustering + trend_analysis"
descripcion: |
Identifica zonas geograficas con potencial de apreciacion
basado en senales tempranas de desarrollo y demanda.
senales_tempranas:
infraestructura:
- "Nuevas lineas de metro/transporte"
- "Nuevos centros comerciales"
- "Nuevos hospitales/escuelas"
- "Mejoras viales"
peso: 0.25
desarrollo:
- "Permisos de construccion nuevos"
- "Proyectos residenciales anunciados"
- "Inversion inmobiliaria en zona"
peso: 0.20
demanda:
- "Incremento en busquedas >20% YoY"
- "Reduccion tiempo en mercado"
- "Incremento en precio m2 >10% YoY"
peso: 0.30
demograficos:
- "Crecimiento poblacional"
- "Mejora en nivel socioeconomico"
- "Reduccion tasa criminalidad"
peso: 0.15
sociales:
- "Nuevos restaurantes/cafes"
- "Apertura coworkings"
- "Eventos culturales"
peso: 0.10
algoritmo:
nombre: "Composite Score + Clustering"
pasos:
1: "Calcular score de cada senal normalizado 0-100"
2: "Weighted average de todas las senales"
3: "K-Means clustering de zonas por score"
4: "Identificar cluster con mejor momentum"
5: "Ranking dentro del cluster"
output:
zona_id: string
nombre_zona: string
score_emergente: float # 0-100
clasificacion: "early_stage | growing | maturing | saturated"
apreciacion_proyectada_12m: float # %
confianza: float
senales_activas: list
mapa_calor: geojson
# --------------------------------------------------------------------------
# 2.3 Analisis de ROI Potencial
# --------------------------------------------------------------------------
analisis_roi:
nombre: "ROIAnalyzer"
alias: "Investment-Analyzer"
tipo: "financial_modeling + ml"
descripcion: |
Calcula el retorno de inversion proyectado para propiedades
considerando diferentes estrategias (renta, flip, desarrollo).
estrategias:
buy_and_hold:
descripcion: "Comprar y rentar a largo plazo"
metricas:
- cap_rate
- cash_on_cash_return
- noi
- dscr
flip:
descripcion: "Comprar, remodelar y vender"
metricas:
- roi_bruto
- roi_neto
- marge_ganancia
- tiempo_proyecto
desarrollo:
descripcion: "Comprar terreno y construir"
metricas:
- irr
- npv
- payback_period
- profit_margin
inputs_requeridos:
propiedad:
- precio_compra
- superficie_m2
- estado_actual
- ubicacion
financiamiento:
- enganche_pct
- tasa_interes
- plazo_anos
operacion:
- renta_estimada_mensual # ML prediction
- gastos_mantenimiento_pct
- tasa_vacancia
- impuestos_anuales
mercado:
- apreciacion_proyectada_anual
- inflacion_proyectada
ml_components:
prediccion_renta:
modelo: "RentPredictor"
tipo: "regression"
features: ["tipo", "ubicacion", "superficie", "amenidades"]
metricas_objetivo:
mape: "< 12%"
prediccion_apreciacion:
modelo: "AppreciationForecaster"
tipo: "time_series"
features: ["zona", "historico_precios", "factores_externos"]
metricas_objetivo:
mape: "< 15%"
prediccion_vacancia:
modelo: "VacancyPredictor"
tipo: "classification"
features: ["tipo", "ubicacion", "precio_renta", "competencia"]
metricas_objetivo:
accuracy: ">= 0.80"
output:
estrategia: string
roi_proyectado_1y: float
roi_proyectado_3y: float
roi_proyectado_5y: float
cash_flow_mensual: float
punto_equilibrio_meses: int
riesgo_nivel: "bajo | medio | alto"
sensibilidad_analisis:
- escenario: "optimista"
roi: float
- escenario: "base"
roi: float
- escenario: "pesimista"
roi: float
# ============================================================================
# 3. ANALISIS DE MERCADO
# ============================================================================
analisis_mercado:
# --------------------------------------------------------------------------
# 3.1 Tendencias de Precios por Zona/Colonia
# --------------------------------------------------------------------------
tendencias_precios:
nombre: "PriceTrendAnalyzer"
alias: "Market-Pulse"
tipo: "time_series_analysis"
descripcion: |
Analiza y visualiza tendencias de precios historicas y proyectadas
por zona geografica, tipo de propiedad y segmento.
agregaciones:
temporal:
- diario
- semanal
- mensual
- trimestral
- anual
geografica:
- pais
- estado
- ciudad
- zona
- colonia
- codigo_postal
propiedad:
- tipo_propiedad
- rango_precio
- superficie_rango
- antiguedad_rango
metricas_calculadas:
- precio_promedio_m2
- precio_mediana_m2
- precio_percentil_25
- precio_percentil_75
- variacion_mensual_pct
- variacion_anual_pct
- volatilidad_30d
- tendencia: "alcista | bajista | lateral"
- fuerza_tendencia: float # 0-100
visualizaciones:
- tipo: "line_chart"
uso: "Evolucion temporal de precios"
- tipo: "heatmap"
uso: "Comparativa geografica"
- tipo: "box_plot"
uso: "Distribucion de precios"
- tipo: "scatter_geo"
uso: "Mapa de precios por ubicacion"
# --------------------------------------------------------------------------
# 3.2 Analisis Comparativo de Propiedades (Comps)
# --------------------------------------------------------------------------
analisis_comparativo:
nombre: "PropertyComparator"
alias: "Comp-Analyzer"
tipo: "similarity_search + statistics"
descripcion: |
Encuentra y analiza propiedades comparables para valuacion
y posicionamiento de mercado.
criterios_similitud:
geograficos:
- radio_km: [0.5, 1, 2, 5]
- misma_colonia: boolean
- mismo_codigo_postal: boolean
fisicos:
- tipo_propiedad: "exacto"
- superficie_m2: "+/- 20%"
- recamaras: "+/- 1"
- banos: "+/- 1"
- antiguedad: "+/- 10 anos"
temporales:
- vendidas_ultimos_meses: [3, 6, 12]
- activas_actualmente: boolean
algoritmo_similitud:
tipo: "weighted_euclidean_distance"
features_numericas:
- superficie_m2
- num_recamaras
- num_banos
- antiguedad
- latitud
- longitud
features_categoricas:
- tipo_propiedad
- estado_conservacion
normalizacion: "min-max"
pesos:
superficie_m2: 0.25
ubicacion: 0.30
tipo: 0.20
caracteristicas: 0.15
antiguedad: 0.10
output:
propiedad_objetivo: object
comparables:
- propiedad: object
similitud_score: float
distancia_km: float
diferencia_precio_pct: float
fecha_venta: date
dias_en_mercado: int
estadisticas:
precio_promedio_comps: float
precio_mediana_comps: float
precio_min: float
precio_max: float
precio_m2_promedio: float
recomendacion_precio:
valor_sugerido: float
rango_min: float
rango_max: float
confianza: float
# --------------------------------------------------------------------------
# 3.3 Indices de Mercado
# --------------------------------------------------------------------------
indices_mercado:
nombre: "MarketIndexCalculator"
alias: "Index-Engine"
tipo: "statistical_aggregation"
descripcion: |
Calcula indices estandarizados para medir salud y dinamica
del mercado inmobiliario.
indices:
indice_precios:
nombre: "IPV (Indice de Precios de Vivienda)"
metodologia: "Case-Shiller repeat-sales"
base: 100
fecha_base: "2020-01-01"
frecuencia: "mensual"
indice_accesibilidad:
nombre: "IAV (Indice de Accesibilidad a Vivienda)"
formula: "(Ingreso_medio_hogar * 12) / Precio_promedio_vivienda"
interpretacion: |
< 3: Muy accesible
3-5: Accesible
5-7: Moderadamente accesible
> 7: Poco accesible
indice_absorcion:
nombre: "Meses de Inventario"
formula: "Inventario_activo / Ventas_mensuales_promedio"
interpretacion: |
< 4: Mercado de vendedores (alta demanda)
4-6: Mercado equilibrado
> 6: Mercado de compradores (baja demanda)
indice_actividad:
nombre: "IAM (Indice de Actividad de Mercado)"
componentes:
- nuevos_listings: peso 0.25
- ventas_cerradas: peso 0.30
- visitas_propiedades: peso 0.20
- dias_en_mercado_inverso: peso 0.25
escala: 0-100
indice_inversion:
nombre: "IRI (Indice de Rendimiento de Inversion)"
componentes:
- cap_rate_promedio: peso 0.35
- apreciacion_anual: peso 0.35
- liquidez_mercado: peso 0.15
- riesgo_inverso: peso 0.15
escala: 0-100
dashboards:
executive_summary:
- indice_precios_trend
- indice_accesibilidad_actual
- indice_absorcion_actual
- mapa_calor_actividad
investor_view:
- indice_inversion_por_zona
- top_zonas_roi
- alertas_oportunidad
agent_view:
- indice_actividad_zona
- tendencia_precios_local
- competencia_analisis
# ============================================================================
# 4. REPORTES PROFESIONALES
# ============================================================================
reportes_profesionales:
# --------------------------------------------------------------------------
# 4.1 Reportes para Agentes Inmobiliarios
# --------------------------------------------------------------------------
reportes_agentes:
tipos:
cma_report:
nombre: "Comparative Market Analysis (CMA)"
descripcion: "Reporte de valuacion para clientes vendedores"
secciones:
- resumen_ejecutivo
- informacion_propiedad
- analisis_comparables
- ajustes_precio
- precio_recomendado
- condiciones_mercado
- estrategia_venta
formato: ["PDF", "HTML", "PowerPoint"]
personalizacion:
- logo_inmobiliaria
- datos_agente
- branding
buyer_presentation:
nombre: "Buyer Property Report"
descripcion: "Reporte de propiedad para compradores"
secciones:
- resumen_propiedad
- analisis_precio
- comparativo_mercado
- proyeccion_apreciacion
- analisis_vecindario
- pros_contras
- recomendacion
market_snapshot:
nombre: "Market Snapshot"
descripcion: "Resumen rapido de mercado local"
secciones:
- indicadores_clave
- tendencia_precios
- inventario_activo
- ventas_recientes
- prediccion_corto_plazo
frecuencia: "semanal"
listing_performance:
nombre: "Listing Performance Report"
descripcion: "Performance de propiedades activas del agente"
secciones:
- listings_activos
- vistas_por_propiedad
- contactos_recibidos
- comparativa_mercado
- recomendaciones_optimizacion
# --------------------------------------------------------------------------
# 4.2 Reportes para Inversores
# --------------------------------------------------------------------------
reportes_inversores:
tipos:
investment_analysis:
nombre: "Investment Analysis Report"
descripcion: "Analisis completo de inversion inmobiliaria"
secciones:
- resumen_ejecutivo
- descripcion_propiedad
- analisis_mercado_local
- proyecciones_financieras:
- flujo_caja_5_anos
- escenarios_sensibilidad
- roi_proyectado
- cap_rate
- cash_on_cash
- analisis_riesgo
- comparativa_alternativas
- recomendacion
portfolio_report:
nombre: "Portfolio Performance Report"
descripcion: "Desempeno de portafolio de propiedades"
secciones:
- resumen_portafolio
- valor_actual_total
- ingresos_por_renta
- gastos_operativos
- roi_por_propiedad
- diversificacion_geografica
- diversificacion_tipo
- benchmark_mercado
- rebalanceo_sugerido
opportunity_alert:
nombre: "Investment Opportunity Alert"
descripcion: "Alerta de oportunidad de inversion"
secciones:
- propiedad_destacada
- por_que_oportunidad
- analisis_rapido
- comparables
- accion_sugerida
- tiempo_limite
market_outlook:
nombre: "Market Outlook Report"
descripcion: "Perspectivas de mercado a futuro"
secciones:
- tendencias_macro
- prediccion_precios
- zonas_emergentes
- riesgos_identificados
- oportunidades
- recomendaciones_estrategicas
frecuencia: "trimestral"
# --------------------------------------------------------------------------
# 4.3 Reportes para Desarrolladores
# --------------------------------------------------------------------------
reportes_desarrolladores:
tipos:
feasibility_study:
nombre: "Feasibility Study Report"
descripcion: "Estudio de factibilidad para desarrollo"
secciones:
- resumen_ejecutivo
- analisis_sitio:
- ubicacion
- uso_suelo
- topografia
- servicios
- analisis_mercado:
- demanda_zona
- competencia
- precios_venta
- absorcion_proyectos_similares
- analisis_financiero:
- costo_terreno
- costo_construccion
- costo_financiero
- precio_venta_proyectado
- utilidad_proyectada
- irr
- payback
- analisis_riesgo
- recomendacion_go_no_go
demand_study:
nombre: "Demand Analysis Report"
descripcion: "Estudio de demanda para nuevo desarrollo"
secciones:
- perfil_demografico_zona
- segmento_objetivo
- tamano_mercado
- competencia_directa
- absorcion_proyectada
- precio_optimo
- product_mix_recomendado
construction_benchmark:
nombre: "Construction Cost Benchmark"
descripcion: "Benchmark de costos de construccion"
secciones:
- costo_m2_por_tipo
- comparativa_zonas
- tendencia_costos
- proveedores_recomendados
- optimizacion_sugerida
project_tracking:
nombre: "Project Tracking Report"
descripcion: "Seguimiento de proyecto de desarrollo"
secciones:
- avance_construccion
- avance_ventas
- flujo_caja_actual
- desviaciones_vs_plan
- proyeccion_cierre
- alertas
# ============================================================================
# 5. TECNICAS ML APLICABLES
# ============================================================================
tecnicas_ml:
# --------------------------------------------------------------------------
# 5.1 Regresion para Valuacion
# --------------------------------------------------------------------------
regresion_valuacion:
descripcion: "Modelos de regresion para predecir valores continuos"
modelos_recomendados:
gradient_boosting:
- nombre: "XGBoost"
uso: "Valuacion de propiedades, prediccion de precios"
hiperparametros:
n_estimators: [100, 500, 1000]
max_depth: [3, 5, 7, 10]
learning_rate: [0.01, 0.05, 0.1]
min_child_weight: [1, 3, 5]
subsample: [0.7, 0.8, 0.9]
colsample_bytree: [0.7, 0.8, 0.9]
pros:
- "Excelente performance en datos tabulares"
- "Feature importance nativa"
- "Maneja missing values"
- "Regularizacion incluida"
contras:
- "Puede overfittear con pocos datos"
- "No extrapola bien"
- nombre: "LightGBM"
uso: "Datasets grandes, entrenamiento rapido"
hiperparametros:
num_leaves: [31, 50, 100]
max_depth: [-1, 10, 20]
learning_rate: [0.01, 0.05, 0.1]
n_estimators: [100, 500, 1000]
min_child_samples: [20, 50, 100]
pros:
- "Muy rapido"
- "Bajo uso de memoria"
- "Excelente con categoricas"
contras:
- "Sensible a overfitting con pocos datos"
linear_models:
- nombre: "ElasticNet"
uso: "Baseline, interpretabilidad, regularizacion"
hiperparametros:
alpha: [0.1, 0.5, 1.0]
l1_ratio: [0.1, 0.5, 0.9]
pros:
- "Muy interpretable"
- "Rapido"
- "Buena regularizacion"
contras:
- "No captura no-linealidades"
feature_engineering:
transformaciones:
- log_transform: "Para precios (distribucion log-normal)"
- sqrt_transform: "Para superficies"
- one_hot_encoding: "Para categoricas con pocas clases"
- target_encoding: "Para categoricas con muchas clases"
- geohash: "Para coordenadas geograficas"
features_derivadas:
- precio_m2: "precio / superficie"
- ratio_banos_recamaras: "banos / recamaras"
- distancia_amenidades: "Distancia ponderada a servicios"
- score_ubicacion: "Composite score de ubicacion"
# --------------------------------------------------------------------------
# 5.2 Clustering para Segmentacion
# --------------------------------------------------------------------------
clustering_segmentacion:
descripcion: "Agrupacion de propiedades, zonas o clientes similares"
aplicaciones:
segmentacion_propiedades:
objetivo: "Agrupar propiedades similares para analisis de mercado"
features:
- precio_m2
- superficie
- tipo
- antiguedad
- ubicacion (lat/lon)
algoritmo_recomendado: "K-Means"
segmentacion_zonas:
objetivo: "Identificar clusters geograficos con caracteristicas similares"
features:
- precio_promedio_m2
- nivel_socioeconomico
- densidad_poblacional
- amenidades_cercanas
- crecimiento_historico
algoritmo_recomendado: "DBSCAN"
segmentacion_compradores:
objetivo: "Perfilar tipos de compradores para targeting"
features:
- presupuesto
- tipo_propiedad_buscada
- zona_preferida
- financiamiento
- urgencia
algoritmo_recomendado: "K-Means + PCA"
algoritmos:
kmeans:
uso: "Clusters esfericos, numero conocido de clusters"
hiperparametros:
n_clusters: "Determinar con Elbow method o Silhouette"
init: "k-means++"
max_iter: 300
evaluacion:
- silhouette_score
- calinski_harabasz_score
- davies_bouldin_score
dbscan:
uso: "Clusters de forma arbitraria, detectar outliers"
hiperparametros:
eps: "Distancia maxima entre puntos"
min_samples: "Minimo puntos para formar cluster"
evaluacion:
- silhouette_score
- noise_ratio
hierarchical:
uso: "Jerarquia de clusters, dendrograma"
hiperparametros:
linkage: ["ward", "complete", "average"]
n_clusters: "O cortar dendrograma"
evaluacion:
- cophenetic_correlation
- silhouette_score
# --------------------------------------------------------------------------
# 5.3 Time Series para Tendencias
# --------------------------------------------------------------------------
time_series_tendencias:
descripcion: "Analisis y prediccion de series temporales de mercado"
aplicaciones:
prediccion_precios:
horizonte: "1-12 meses"
granularidad: "mensual"
prediccion_demanda:
horizonte: "1-6 meses"
granularidad: "semanal o mensual"
deteccion_estacionalidad:
objetivo: "Identificar patrones estacionales en mercado"
periodos: ["semanal", "mensual", "anual"]
algoritmos:
prophet:
uso: "Series con estacionalidad multiple, tendencias no lineales"
pros:
- "Facil de usar"
- "Maneja holidays y eventos"
- "Robusto a datos faltantes"
- "Intervalos de confianza automaticos"
contras:
- "No muy preciso para series muy irregulares"
hiperparametros:
changepoint_prior_scale: [0.001, 0.01, 0.1, 0.5]
seasonality_prior_scale: [0.01, 0.1, 1, 10]
seasonality_mode: ["additive", "multiplicative"]
sarima:
uso: "Series estacionarias con estacionalidad"
pros:
- "Teoricamente solido"
- "Bueno para series cortas"
contras:
- "Asume estacionariedad"
- "Dificil de tunar"
hiperparametros:
p: [0, 1, 2]
d: [0, 1]
q: [0, 1, 2]
P: [0, 1]
D: [0, 1]
Q: [0, 1]
s: 12 # Para mensual
xgboost_temporal:
uso: "Series con features externas importantes"
pros:
- "Incorpora features externas facilmente"
- "Captura no-linealidades"
contras:
- "No modela dependencia temporal nativamente"
features_temporales:
- lag_features: [1, 7, 30, 365]
- rolling_mean: [7, 30, 90]
- rolling_std: [7, 30]
- day_of_week
- month
- quarter
- is_holiday
# --------------------------------------------------------------------------
# 5.4 NLP para Analisis de Descripciones
# --------------------------------------------------------------------------
nlp_descripciones:
descripcion: |
Procesamiento de lenguaje natural para extraer informacion
y features de descripciones de propiedades.
aplicaciones:
extraccion_amenidades:
objetivo: "Identificar amenidades mencionadas en descripcion"
tecnica: "Named Entity Recognition (NER) customizado"
entidades:
- "amenidad_interior": ["alberca", "gimnasio", "salon_eventos"]
- "amenidad_exterior": ["jardin", "terraza", "roof_garden"]
- "caracteristica": ["remodelado", "estrenar", "amueblado"]
- "ubicacion_ref": ["cerca_metro", "zona_exclusiva"]
sentiment_analysis:
objetivo: "Evaluar tono y calidad de descripcion"
metricas:
- positivity_score
- urgency_score
- professionalism_score
quality_scoring:
objetivo: "Puntuar calidad de la descripcion"
features:
- longitud_palabras
- num_amenidades_mencionadas
- estructura_gramatical
- keywords_relevantes
- llamados_accion
output: "quality_score (0-100)"
similarity_search:
objetivo: "Encontrar propiedades con descripciones similares"
tecnica: "Embeddings + Cosine Similarity"
modelos:
embeddings:
- nombre: "text-embedding-3-small"
provider: "OpenAI"
dimensiones: 1536
uso: "Similarity search, semantic search"
costo: "$0.00002 / 1K tokens"
- nombre: "all-MiniLM-L6-v2"
provider: "Sentence Transformers"
dimensiones: 384
uso: "On-premise, bajo costo"
costo: "Gratis (self-hosted)"
ner:
- nombre: "SpaCy + Custom NER"
uso: "Extraccion de entidades inmobiliarias"
training: "Fine-tune con datos anotados"
- nombre: "GPT-4 / Claude"
uso: "Zero-shot extraction"
prompt: |
Extrae las siguientes entidades de esta descripcion de propiedad:
- Amenidades interiores
- Amenidades exteriores
- Caracteristicas especiales
- Referencias de ubicacion
Descripcion: {descripcion}
Responde en JSON.
sentiment:
- nombre: "VADER"
uso: "Sentiment basico, rapido"
- nombre: "RoBERTa fine-tuned"
uso: "Sentiment mas preciso"
# ============================================================================
# 6. ARQUITECTURA TECNICA
# ============================================================================
arquitectura_tecnica:
stack_tecnologico:
ml_framework:
- scikit-learn: "Modelos clasicos, preprocessing"
- xgboost: "Gradient boosting"
- lightgbm: "Gradient boosting alternativo"
- pytorch: "Deep learning (si necesario)"
- prophet: "Time series"
data_processing:
- pandas: "Manipulacion de datos"
- polars: "Procesamiento rapido de grandes datasets"
- numpy: "Operaciones numericas"
- geopandas: "Datos geograficos"
nlp:
- spacy: "NER, preprocessing"
- sentence-transformers: "Embeddings"
- langchain: "LLM integration"
api:
- fastapi: "API REST"
- pydantic: "Validacion de schemas"
- uvicorn: "ASGI server"
mlops:
- mlflow: "Experiment tracking"
- dvc: "Data versioning"
- docker: "Containerization"
database:
- postgresql: "Datos transaccionales"
- pgvector: "Vector embeddings"
- redis: "Cache de predicciones"
estructura_proyecto:
ml_service:
- src/:
- api/:
- main.py
- routes/
- schemas/
- models/:
- property_valuation/
- time_to_sell/
- demand_forecast/
- opportunity_detector/
- pipelines/:
- preprocessing.py
- feature_engineering.py
- training/:
- train.py
- evaluate.py
- hyperparameter_tuning.py
- inference/:
- predictor.py
- batch_predictor.py
- nlp/:
- embeddings.py
- entity_extraction.py
- utils/:
- logging.py
- metrics.py
- geo.py
- notebooks/
- data/:
- raw/
- processed/
- models/
- tests/
- configs/
- mlflow/
- Dockerfile
- requirements.txt
- MODEL_CARDS/
api_design:
base_url: "/api/v1/ml"
endpoints:
valuation:
- "POST /valuation/predict"
- "POST /valuation/batch"
- "POST /valuation/explain"
- "GET /valuation/comparables/{property_id}"
predictions:
- "POST /predictions/time-to-sell"
- "POST /predictions/demand/{zone_id}"
- "GET /predictions/trends/{zone_id}"
opportunities:
- "GET /opportunities/undervalued"
- "GET /opportunities/emerging-zones"
- "POST /opportunities/roi-analysis"
market:
- "GET /market/indices"
- "GET /market/trends/{zone_id}"
- "GET /market/comparables/{property_id}"
reports:
- "POST /reports/cma"
- "POST /reports/investment-analysis"
- "POST /reports/market-snapshot"
monitoring:
metricas:
modelo:
- prediction_latency_ms
- prediction_count
- error_rate
- drift_score
negocio:
- accuracy_vs_actual: "Prediccion vs precio real de venta"
- user_adoption: "% de usuarios que usan predicciones"
- report_generation_count
alertas:
- "Drift detectado > umbral"
- "Latencia > 500ms"
- "Error rate > 5%"
- "Modelo accuracy < 80%"
# ============================================================================
# 7. ROADMAP DE IMPLEMENTACION
# ============================================================================
roadmap:
fase_1_mvp:
duracion: "4-6 semanas"
entregables:
- "AVM basico (XGBoost)"
- "API de valuacion"
- "Dashboard simple de tendencias"
- "Reporte CMA basico"
prioridad: "CRITICA"
fase_2_predicciones:
duracion: "4-6 semanas"
entregables:
- "Prediccion tiempo de venta"
- "Prediccion demanda por zona"
- "Detector propiedades subvaluadas"
- "Alertas de oportunidades"
prioridad: "ALTA"
fase_3_analisis_avanzado:
duracion: "4-6 semanas"
entregables:
- "Indices de mercado"
- "Analisis ROI"
- "Zonas emergentes"
- "Reportes para inversores"
prioridad: "MEDIA"
fase_4_nlp_optimization:
duracion: "4-6 semanas"
entregables:
- "Analisis NLP descripciones"
- "Scoring calidad listings"
- "Recomendaciones personalizadas"
- "A/B testing de modelos"
prioridad: "MEDIA"
fase_5_enterprise:
duracion: "4-8 semanas"
entregables:
- "Multi-tenant isolation"
- "Custom models por cliente"
- "API avanzada (batch, webhooks)"
- "Reportes white-label"
prioridad: "BAJA"
# ============================================================================
# 8. METRICAS DE EXITO
# ============================================================================
metricas_exito:
modelo:
avm_accuracy:
metrica: "MAPE"
objetivo: "< 10%"
medicion: "Prediccion vs precio de venta real"
time_to_sell_accuracy:
metrica: "MAPE"
objetivo: "< 25%"
medicion: "Dias predichos vs dias reales"
demand_forecast:
metrica: "Directional Accuracy"
objetivo: ">= 70%"
medicion: "Prediccion correcta de subida/bajada"
negocio:
user_adoption:
objetivo: "70% de usuarios activos usan ML features"
medicion: "MAU ML / MAU total"
report_generation:
objetivo: ">100 reportes/mes por cliente enterprise"
opportunity_conversion:
objetivo: "30% de oportunidades alertadas son investigadas"
nps_ml_features:
objetivo: ">= 40"
medicion: "NPS especifico de features ML"
tecnico:
api_latency:
objetivo: "p95 < 500ms para valuacion individual"
availability:
objetivo: "99.5% uptime"
model_freshness:
objetivo: "Re-entrenamiento mensual"