1 Introducción

2 Los datos

Los datos se descargan de https://www.aduana.gov.py/?page_id=14523

Se utilizan los comandos de la libreria tidyr [@tidyverse]

3 Metodologia

4 Procesamiento

4.1 Acceso a los datos

import polars as pl
import pandas as pd
import numpy as np
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error, r2_score
import matplotlib.pyplot as plt

# 1) Leer CSV con Polars
df = pl.read_csv(
    r"G:/Mi unidad/Classroom/Big Data Sudameris/datosADUANASpy/2024_DICIEMBRE.csv",
    infer_schema_length=1000
)
df
shape: (463_500, 47)
DESPACHO CIFRADOOPERACIONDESTINACIONREGIMENOFICIALIZACIONCANCELACIONAÑOMESADUANACOTIZACIONMEDIO TRANSPORTECANALITEMPAIS ORIGENPAIS PROCEDENCIA/DESTINOUSOUNIDAD MEDIDA ESTADISTICACANTIDAD ESTADISTICAKILO NETOKILO BRUTOFOB DOLARFLETE DOLARSEGURO DOLARIMPONIBLE DOLARIMPONIBLE GSAJUSTE A INCLUIRAJUSTE A DEDUCIRPOSICION RUBRODESC CAPITULODESC PARTIDADESC POSICIONMERCADERIAMARCA ITEMACUERDONUMERO SUBITEMCANTIDAD SUBITEMPRECION UNITARIO SUBITEMDESC SUBITEMMARCA SUBITEMDERECHOISCSERVICIORENTAIVAOTROSTOTAL
strstrstrstrstrstri64strstrstrstrstri64strstrstrstrstrstrstrstrstrstrstrstrstrstrstrstrstrstrstrstrstrstri64i64strstrstrstrstrstrstrstrstrstr
"24DA000000611468""IMPORTACION""IC04""IMPORTACION A CONSUMO CON DOCU…"09/12/2024""09/12/2024"2024"DICIEMBRE""PAKSA""7813,19""CAMION""V"4"BRASIL""BRASIL""NUEVO""KILOGRAMO""514,8""514,8""514,8""3162,51""99,88""31,63""3294,02""25736804,12"",0"",0""5208.29.00.000Q""MATERIAS TEXTILES (TEJIDOS)""CAPITULO 52 ALGODON""TEJIDOS DE ALGODON CON UN CONT…"CAPITULO 52 ALGODON  TEJIDOS D…"LOS DEMAS TEJIDOS DETALLE SUB-…null"MERCOSUR"622"1,48""MTS. TEJIDOS  TP 05754 RIVIERA…"CIC"",0"",0""128684,0"",0""2586549,0""103462,0""2818695,0"
"24DA000000611468""IMPORTACION""IC04""IMPORTACION A CONSUMO CON DOCU…"09/12/2024""09/12/2024"2024"DICIEMBRE""PAKSA""7813,19""CAMION""V"4"BRASIL""BRASIL""NUEVO""KILOGRAMO""514,8""514,8""514,8""3162,51""99,88""31,63""3294,02""25736804,12"",0"",0""5208.29.00.000Q""MATERIAS TEXTILES (TEJIDOS)""CAPITULO 52 ALGODON""TEJIDOS DE ALGODON CON UN CONT…"CAPITULO 52 ALGODON  TEJIDOS D…"LOS DEMAS TEJIDOS DETALLE SUB-…null"MERCOSUR"757"1,48""MTS. TEJIDOS  TP 05849 OXFORD …"CIC"",0"",0""128684,0"",0""2586549,0""103462,0""2818695,0"
"24DA000000611468""IMPORTACION""IC04""IMPORTACION A CONSUMO CON DOCU…"09/12/2024""09/12/2024"2024"DICIEMBRE""PAKSA""7813,19""CAMION""V"4"BRASIL""BRASIL""NUEVO""KILOGRAMO""514,8""514,8""514,8""3162,51""99,88""31,63""3294,02""25736804,12"",0"",0""5208.29.00.000Q""MATERIAS TEXTILES (TEJIDOS)""CAPITULO 52 ALGODON""TEJIDOS DE ALGODON CON UN CONT…"CAPITULO 52 ALGODON  TEJIDOS D…"LOS DEMAS TEJIDOS DETALLE SUB-…null"MERCOSUR"831"1,48""MTS. TEJIDOS  TP  05930  GALLE…"CIC"",0"",0""128684,0"",0""2586549,0""103462,0""2818695,0"
"24DA000000611468""IMPORTACION""IC04""IMPORTACION A CONSUMO CON DOCU…"09/12/2024""09/12/2024"2024"DICIEMBRE""PAKSA""7813,19""CAMION""V"4"BRASIL""BRASIL""NUEVO""KILOGRAMO""514,8""514,8""514,8""3162,51""99,88""31,63""3294,02""25736804,12"",0"",0""5208.29.00.000Q""MATERIAS TEXTILES (TEJIDOS)""CAPITULO 52 ALGODON""TEJIDOS DE ALGODON CON UN CONT…"CAPITULO 52 ALGODON  TEJIDOS D…"LOS DEMAS TEJIDOS DETALLE SUB-…null"MERCOSUR"915"1,48""MTS. TEJIDOS  TP 07020 POINT""CIC"",0"",0""128684,0"",0""2586549,0""103462,0""2818695,0"
"24DA000000611468""IMPORTACION""IC04""IMPORTACION A CONSUMO CON DOCU…"09/12/2024""09/12/2024"2024"DICIEMBRE""PAKSA""7813,19""CAMION""V"4"BRASIL""BRASIL""NUEVO""KILOGRAMO""514,8""514,8""514,8""3162,51""99,88""31,63""3294,02""25736804,12"",0"",0""5208.29.00.000Q""MATERIAS TEXTILES (TEJIDOS)""CAPITULO 52 ALGODON""TEJIDOS DE ALGODON CON UN CONT…"CAPITULO 52 ALGODON  TEJIDOS D…"LOS DEMAS TEJIDOS DETALLE SUB-…null"MERCOSUR"10205"1,5""MTS. TEJIDOS  TP 05571 M 437""CIC"",0"",0""128684,0"",0""2586549,0""103462,0""2818695,0"
"24DA000000607070""EXPORTACION""EFC1""EXPORTACION COMPLEMENTARIA""10/12/2024""10/12/2024"2024"DICIEMBRE""ENCARNACION""7822,03""CAMION""V"3"ALEMANIA""ALEMANIA""NUEVO""UNIDAD""4,0""24,0""24,0""741,89""7,33"",0""748,37""5853798,21"",0"",0""8708.91.00.000C""REPUESTOS (AUTOPARTE)""CAPITULO 87 VEHICULOS AUTOMOVI…"PARTES Y ACCESORIOS PARA VEHIC…"CAPITULO 87 VEHICULOS AUTOMOVI…"RADIADORES Y SUS PARTES DETALL…null"SIN ACUERDO"null0",0"nullnull",0"",0"",0"",0"",0"",0"",0"
"24DA000000557263""EXPORTACION""EFC1""EXPORTACION COMPLEMENTARIA""02/12/2024""03/12/2024"2024"DICIEMBRE""CAMPESTRE S.A.""7798,04""CAMION""V"1"PARAGUAY""BRASIL""NUEVO""KILOGRAMO""25998,5""25998,5""27647,11""203556,22"",0"",0""203756,96""1588904893,14"",0"",0""0201.30.00.000Z""CARNES Y DERIVADOS""CAPITULO 2CARNE Y DESPOJOS COM…"CARNE DE ANIMALES DE LA ESPECI…"CAPITULO 2CARNE Y DESPOJOS COM…"CARNE BOVINA ENFRIADA DESHUESA…null"MERCOSUR"null0",0"nullnull",0"",0"",0"",0"",0"",0"",0"
"24DA000000561671""EXPORTACION""EFC1""EXPORTACION COMPLEMENTARIA""29/11/2024""03/12/2024"2024"DICIEMBRE""PUERTO SECO BOREAL""7805,73""CAMION""R"2"PARAGUAY""URUGUAY""NUEVO""METRO CUBICO""35,79""23800,0""23800,0""15515,3""1523,29"",0""17038,59""132998633,12"",0"",0""4412.33.00.000X""MADERA""CAPITULO 44 MADERA, CARBON VEG…"MADERA CONTRACHAPADA, MADERA C…"CAPITULO 44 MADERA, CARBON VEG…"MADERA CONTRACHAPADA, MADERA C…null"MERCOSUR"null0",0"nullnull",0"",0"",0"",0"",0"",0"",0"
"24DA000000583235""EXPORTACION""EFC1""EXPORTACION COMPLEMENTARIA""16/12/2024""19/12/2024"2024"DICIEMBRE""CAMPESTRE S.A.""7817,53""CAMION""V"2"PARAGUAY""BRASIL""NUEVO""UNIDAD""228480,0""4211,52""4711,52""20627,28"",0"",0""20627,28""161254380,22"",0"",0""3923.50.00.000C""PLASTICOS Y SUS MANUFACTURAS""CAPITULO 39 MATERIAS PLASTICAS…"ARTICULOS PARA EL TRANSPORTE O…"CAPITULO 39 MATERIAS PLASTICAS…"TAPONES,TAPAS, CAPSULAS Y DEMA…null"MERCOSUR"null0",0"nullnull",0"",0"",0"",0"",0"",0"",0"
"24DA000000607946""EXPORTACION""EFC1""EXPORTACION COMPLEMENTARIA""06/12/2024""06/12/2024"2024"DICIEMBRE""ENCARNACION""7825,79""CAMION""V"4"CHINA""URUGUAY""NUEVO""UNIDAD""2045,0""533,02""726,14""20710,11""944,02"",0""21654,13""169460674,02"",0"",0""9507.10.00.000E""JUGUETES""CAPITULO 95JUGUETES, JUEGOS Y …"CA¿AS DE PESCAR, ANZUELOS Y DE…"CAPITULO 95JUGUETES, JUEGOS Y …"DETALLE SUBITEM"null"SIN ACUERDO"null0",0"nullnull",0"",0"",0"",0"",0"",0"",0"
df.columns
## ['DESPACHO CIFRADO', 'OPERACION', 'DESTINACION', 'REGIMEN', 'OFICIALIZACION', 'CANCELACION', 'AÑO', 'MES', 'ADUANA', 'COTIZACION', 'MEDIO TRANSPORTE', 'CANAL', 'ITEM', 'PAIS ORIGEN', 'PAIS PROCEDENCIA/DESTINO', 'USO', 'UNIDAD MEDIDA ESTADISTICA', 'CANTIDAD ESTADISTICA', 'KILO NETO', 'KILO BRUTO', 'FOB DOLAR', 'FLETE DOLAR', 'SEGURO DOLAR', 'IMPONIBLE DOLAR', 'IMPONIBLE GS', 'AJUSTE A INCLUIR', 'AJUSTE A DEDUCIR', 'POSICION ', 'RUBRO', 'DESC CAPITULO', 'DESC PARTIDA', 'DESC POSICION', 'MERCADERIA', 'MARCA ITEM', 'ACUERDO', 'NUMERO SUBITEM', 'CANTIDAD SUBITEM', 'PRECION UNITARIO SUBITEM', 'DESC SUBITEM', 'MARCA SUBITEM', 'DERECHO', 'ISC', 'SERVICIO', 'RENTA', 'IVA', 'OTROS', 'TOTAL']
# 2) Normalizar nombres de columna
mapping = {
    col: (
        col.strip().lower()
           .replace("á","a").replace("é","e")
           .replace("í","i").replace("ó","o")
           .replace("ú","u").replace("ñ","n")
           .replace(" ", "_").replace("/", "_")
    )
    for col in df.columns
}
df = df.rename(mapping)

# 3) Asegurar que 'ano' sea numérico y filtrar diciembre 2024
df = (
    df
    .with_columns(pl.col("ano").cast(pl.Int64))
    .filter(
        (pl.col("ano") == 2024) &
        (pl.col("mes").str.to_uppercase() == "DICIEMBRE")
    )
)

# 4) Seleccionar y limpiar las dos columnas de interés
df = (
    df
    .select([
        pl.col("kilo_neto").alias("peso_kg"),
        pl.col("fob_dolar").alias("valor_usd")
    ])
    # 4a) Reemplazar coma decimal por punto y convertir a Float64
    .with_columns([
        pl.col("peso_kg")
          .str.replace(",", ".")
          .cast(pl.Float64)
          .alias("peso_kg"),
        pl.col("valor_usd")
          .str.replace(",", ".")
          .cast(pl.Float64)
          .alias("valor_usd")
    ])
    .drop_nulls()
)
# 5) Convertir a pandas para scikit-learn
pdf = df.to_pandas()
X = pdf[["peso_kg"]].values.reshape(-1, 1)
y = pdf["valor_usd"].values

# 6) Entrenar regresión lineal
model = LinearRegression().fit(X, y)
y_pred = model.predict(X)

# 7) Mostrar métricas
print(f"Pendiente:   {model.coef_[0]:.4f}")
## Pendiente:   0.5182
print(f"Intercepto:  {model.intercept_:.4f}")
## Intercepto:  35338.1400
print(f"MSE:         {mean_squared_error(y, y_pred):.2f}")
## MSE:         57347486684.16
print(f"R²:          {r2_score(y, y_pred):.4f}")
## R²:          0.0494
# 8) Gráfica de ajuste
plt.figure(figsize=(8,6))
plt.scatter(X, y, alpha=0.6, edgecolor='k', label='Datos')
plt.plot(X, y_pred, color='red', linewidth=2, label='Regresión')
plt.title('FOB vs. Peso Neto (Diciembre 2024)')
plt.xlabel('Peso Neto (kg)')
plt.ylabel('FOB (USD)')
plt.legend()
plt.grid(True)
plt.show()

Interpretación de los coeficientes Pendiente (coeficiente ≈ 0.5182) Indica que, en promedio, cada kilogramo adicional de mercancía se asocia con un incremento de 0.52 USD en el valor FOB.

Intercepto (≈ 35 338 USD) Representa el valor FOB “predicho” cuando el peso es cero. En la práctica no tiene un sentido físico directo, pero compensa el sesgo de la línea.

Calidad del ajuste MSE ≈ 5.73 × 10¹⁰ La media de los errores al cuadrado es alta, lo que refleja grandes discrepancias entre los valores reales y los predichos (especialmente cuando hay embarques muy pesados o de alto valor).

R² ≈ 0.0494 Solo el 4.9 % de la variación en FOB se explica por la variación en peso neto. Esto indica que peso neto por sí solo no es un buen predictor del valor FOB: hay otros factores (tipo de mercancía, país de origen, régimen aduanero, etc.) que influyen mucho más.

5 Conclusiones

6 Referencias

7 Anexo