AI Engineer Python
1. PYTHON: FUNDAMENTOS
Sintaxis de Python
Definición: La sintaxis define cómo deben escribirse las instrucciones; Python usa la indentación para delimitar bloques. Los dos puntos introducen bloques como funciones, condicionales y bucles.
Ejemplo:
if saldo >= 0:
print("Cuenta válida")
Variables y tipos de datos
Definición: Una variable referencia un valor y su tipo determina qué operaciones admite. Tipos frecuentes son int, float, str, bool, list, tuple, dict y NoneType.
Ejemplo:
cliente_id = 1042
saldo = 2580.75
activo = True
Operadores
Definición: Los operadores realizan operaciones aritméticas, comparaciones y combinaciones lógicas; == compara valores y = asigna. and, or y not combinan condiciones booleanas.
Ejemplo:
saldo = 1200.0
es_aprobable = saldo >= 500 and cliente_activo # cliente_activo es un bool existente
Condicionales
Definición: if, elif y else ejecutan una rama según se cumplan condiciones. Las condiciones deben evaluar a un valor verdadero o falso.
Ejemplo:
if score >= 700:
riesgo = "bajo"
else:
riesgo = "revisar"
Bucles
Definición: for recorre elementos de un iterable y while repite mientras una condición sea verdadera. break termina un bucle y continue salta a la siguiente iteración.
Ejemplo:
for importe in [120, 80, 250]:
if importe > 200:
print("Revisar operación:", importe)
Funciones
Definición: Una función encapsula instrucciones reutilizables, recibe parámetros y puede devolver un resultado con return. Facilita las pruebas y reduce duplicación.
Ejemplo:
def calcular_comision(importe, tasa=0.01):
return round(importe * tasa, 2)
print(calcular_comision(1500))
Listas
Definición: Una lista es una colección ordenada y mutable que admite valores repetidos. Sus índices empiezan en cero.
Ejemplo:
importes = [120.0, 450.0, 80.0]
importes.append(200.0)
print(importes[0], len(importes))
Tuplas
Definición: Una tupla es una colección ordenada e inmutable, útil para representar registros que no deben modificarse. Puede contener elementos de distintos tipos.
Ejemplo:
operacion = ("TRX-901", 750.00, "MXN")
folio, importe, moneda = operacion
Diccionarios
Definición: Un diccionario almacena pares clave-valor y permite recuperar datos por una clave. Las claves deben ser hashables y únicas.
Ejemplo:
transaccion = {"id": "TRX-901", "importe": 750.0}
transaccion["estado"] = "pendiente"
print(transaccion["importe"])
Conjuntos (set)
Definición: Un set almacena elementos únicos sin garantizar un orden posicional. Se usa para eliminar duplicados y realizar operaciones como unión e intersección.
Ejemplo:
clientes = {101, 102, 101, 103}
clientes_bloqueados = {103, 104}
print(clientes - clientes_bloqueados)
Manejo de cadenas (str)
Definición: str representa texto y ofrece métodos para limpiar, dividir, buscar y transformar cadenas. Las cadenas son inmutables, por lo que los métodos devuelven nuevas cadenas.
Ejemplo:
referencia = " pago tarjeta ".strip().upper()
print(referencia.replace(" ", "_"))
Comprensiones de listas
Definición: Una comprensión crea una lista a partir de un iterable, opcionalmente filtrando o transformando elementos. Conviene mantenerla legible y evitar efectos secundarios.
Ejemplo:
importes = [120, -5, 300, 0]
validos = [x for x in importes if x > 0]
Manejo de excepciones (try/except)
Definición: try/except permite manejar errores esperados sin detener abruptamente el programa. Conviene capturar excepciones específicas y no ocultar fallos con un except genérico.
Ejemplo:
try:
importe = float("1250.50")
except ValueError:
importe = None
Lectura y escritura de archivos
Definición: open permite leer o escribir archivos; with cierra el recurso automáticamente. Especificar la codificación evita problemas con caracteres como acentos.
Ejemplo:
from pathlib import Path
Path("salida.txt").write_text("Lote procesado\n", encoding="utf-8")
texto = Path("salida.txt").read_text(encoding="utf-8")
Módulos e importaciones
Definición: Un módulo es un archivo Python reutilizable; import permite usar sus funciones, clases y constantes. Los entornos virtuales ayudan a aislar dependencias del proyecto.
Ejemplo:
from decimal import Decimal
importe = Decimal("125.40")
print(importe.quantize(Decimal("0.01")))
Programación orientada a objetos (POO)
Definición: La POO organiza datos y comportamiento en clases e instancias; __init__ inicializa el objeto y self se refiere a la instancia. La encapsulación ayuda a mantener reglas de negocio coherentes.
Ejemplo:
class Cuenta:
def __init__(self, saldo): self.saldo = saldo
def depositar(self, importe):
if importe > 0: self.saldo += importe
cuenta = Cuenta(1000); cuenta.depositar(250)
Depuración de código
Definición: Depurar consiste en localizar y corregir la causa de un defecto mediante reproducción, inspección del estado y verificación de la solución. Un depurador permite usar puntos de interrupción y examinar variables paso a paso.
Ejemplo:
import pdb
saldo = 1200
pdb.set_trace() # inspeccionar saldo y continuar con n/c
saldo -= 200
Jupyter Notebook
Definición: Jupyter permite ejecutar código por celdas y combinar código, resultados y notas, útil para análisis exploratorio reproducible. El estado permanece en memoria entre celdas, por lo que el orden de ejecución puede afectar los resultados.
Ejemplo:
# En una celda de Notebook
import pandas as pd
df = pd.DataFrame({"importe": [100, 250, 80]})
df["importe"].mean()
2. MANIPULACIÓN Y ANÁLISIS DE DATOS
NumPy
Definición: NumPy proporciona arreglos n-dimensionales y operaciones numéricas vectorizadas eficientes. Los arreglos suelen requerir elementos de tipo homogéneo y son base de muchas bibliotecas de datos y ML.
Ejemplo:
import numpy as np
importes = np.array([100.0, 250.0, 80.0])
print(importes.mean(), importes.max())
Pandas
Definición: Pandas permite cargar, transformar y analizar datos tabulares mediante operaciones por columnas, filtros y agregaciones. Es habitual para preparar datos antes de entrenar un modelo.
Ejemplo:
import pandas as pd
df = pd.DataFrame({"cliente": [1, 2], "saldo": [500, 900]})
print(df["saldo"].mean())
DataFrames y Series
Definición: Un DataFrame es una tabla bidimensional con etiquetas en filas y columnas; una Series es una estructura unidimensional etiquetada. Seleccionar una columna normalmente devuelve una Series.
Ejemplo:
df = pd.DataFrame({"cliente": [1, 2], "saldo": [500, 900]})
saldos = df["saldo"]
print(type(df).__name__, type(saldos).__name__)
Limpieza de datos
Definición: Limpiar datos consiste en corregir formatos inválidos, inconsistencias, valores imposibles y registros no utilizables según reglas documentadas. Las reglas deben preservar trazabilidad y no alterar silenciosamente importes financieros.
Ejemplo:
df["importe"] = pd.to_numeric(df["importe"], errors="coerce")
df = df.dropna(subset=["id_transaccion"]) # conservar la regla de importes del negocio
Valores nulos
Definición: Un valor nulo indica que un dato falta o no está disponible y no equivale necesariamente a cero. Puede detectarse con isna() y tratarse según la causa y el uso del campo.
Ejemplo:
mascara = df["ingreso_mensual"].isna()
print(df[mascara])
df["ingreso_mensual"] = df["ingreso_mensual"].fillna(df["ingreso_mensual"].median())
Duplicados
Definición: Los duplicados son filas repetidas total o parcialmente según una clave de negocio. Antes de eliminarlos, debe definirse si representan errores o eventos legítimos, por ejemplo dos pagos del mismo importe.
Ejemplo:
df = df.drop_duplicates(subset=["id_transaccion"], keep="last")
Filtrado de datos
Definición: Filtrar selecciona filas que cumplen condiciones y permite aislar subconjuntos para análisis o modelado. En Pandas, las condiciones booleanas se combinan con & o | entre paréntesis.
Ejemplo:
fraude_candidatos = df[(df["importe"] > 10000) & (df["pais"] != "MX")]
Transformación de datos
Definición: Transformar datos cambia formatos o crea variables derivadas para que sean consistentes y útiles para el análisis. La transformación debe basarse en reglas reproducibles y evitar usar información futura.
Ejemplo:
df["fecha"] = pd.to_datetime(df["fecha"], errors="coerce")
df["importe_mxn"] = df["importe"] * df["tipo_cambio"]
Análisis exploratorio de datos (EDA)
Definición: El EDA examina estructura, distribuciones, valores nulos, anomalías y relaciones antes de modelar. Sus hallazgos orientan la limpieza y ayudan a detectar sesgos o errores de captura.
Ejemplo:
print(df.shape, df.dtypes)
print(df.isna().mean().sort_values(ascending=False).head())
print(df.describe(include="all"))
Matplotlib
Definición: Matplotlib crea visualizaciones para inspeccionar distribuciones, tendencias y diferencias entre grupos. En análisis bancario puede ayudar a encontrar importes atípicos o cambios temporales.
Ejemplo:
import matplotlib.pyplot as plt
df["importe"].plot(kind="hist", bins=20)
plt.xlabel("Importe de transacción"); plt.tight_layout(); plt.show()
Archivos CSV
Definición: CSV representa datos tabulares en texto, normalmente separados por comas o punto y coma. Hay que validar codificación, delimitador, tipos y encabezados al importarlo.
Ejemplo:
df = pd.read_csv("transacciones.csv", encoding="utf-8")
df.to_csv("transacciones_limpias.csv", index=False)
Archivos JSON
Definición: JSON representa datos estructurados mediante objetos, arreglos y valores primitivos y se usa ampliamente en APIs. En Python, json.load(s) convierte JSON en estructuras nativas.
Ejemplo:
import json
registro = json.loads('{"id":"TRX-9","importe":450.0}')
print(registro["importe"])
3. SQL Y BASES DE DATOS
Fundamentos de bases de datos relacionales
Definición: Una base relacional organiza la información en tablas relacionadas mediante claves y restricciones. SQL permite consultar y modificar esos datos manteniendo reglas de integridad.
Ejemplo:
-- Tablas: clientes(id_cliente PRIMARY KEY), cuentas(id_cuenta PRIMARY KEY, id_cliente FOREIGN KEY)
SELECT id_cuenta, id_cliente
FROM cuentas;
SQL
Definición: SQL es el lenguaje declarativo usado para definir, consultar y modificar datos en bases relacionales. Se expresa qué resultado se necesita, mientras el motor decide cómo ejecutarlo.
Ejemplo:
SELECT id_cliente, saldo
FROM cuentas
WHERE saldo < 0;
SELECT
Definición: SELECT especifica las columnas o expresiones que devuelve una consulta; WHERE filtra filas antes de la agregación. Evitar SELECT * en producción reduce transferencia y acoplamiento a cambios de esquema.
Ejemplo:
SELECT id_transaccion, importe, fecha
FROM transacciones
WHERE estado = 'rechazada';
WHERE
Definición: WHERE restringe filas con condiciones sobre columnas, rangos, patrones o pertenencia a conjuntos. Los valores nulos se evalúan con IS NULL o IS NOT NULL, no con = NULL.
Ejemplo:
SELECT id_cliente, ingreso
FROM solicitudes
WHERE ingreso >= 15000 AND ingreso IS NOT NULL;
ORDER BY
Definición: ORDER BY ordena el resultado por una o varias columnas en orden ascendente (ASC) o descendente (DESC). Sin ORDER BY, SQL no garantiza el orden de las filas.
Ejemplo:
SELECT id_transaccion, importe
FROM transacciones
ORDER BY importe DESC
LIMIT 10;
GROUP BY
Definición: GROUP BY agrupa filas que comparten valores para calcular resultados por grupo. Las columnas seleccionadas que no estén agregadas normalmente deben incluirse en el agrupamiento.
Ejemplo:
SELECT estado, COUNT(*) AS operaciones
FROM transacciones
GROUP BY estado;
Funciones de agregación
Definición: COUNT, SUM, AVG, MIN y MAX calculan resúmenes de varias filas; la mayoría ignora valores NULL, mientras COUNT(*) cuenta filas. HAVING filtra grupos después de la agregación.
Ejemplo:
SELECT id_cliente, SUM(importe) AS gasto_total
FROM transacciones
GROUP BY id_cliente
HAVING SUM(importe) > 50000;
JOIN
Definición: JOIN combina filas de tablas según una condición; INNER JOIN conserva coincidencias y LEFT JOIN conserva todas las filas de la tabla izquierda. Una relación de uno-a-muchos puede multiplicar filas y afectar agregaciones.
Ejemplo:
SELECT c.id_cliente, t.importe
FROM clientes c
JOIN transacciones t ON t.id_cliente = c.id_cliente;
Claves primarias y foráneas
Definición: Una clave primaria identifica de forma única cada fila y no admite NULL; una clave foránea referencia una clave de otra tabla y ayuda a mantener integridad referencial. La restricción exacta depende del esquema y del motor SQL.
Ejemplo:
CREATE TABLE clientes (
id_cliente INT PRIMARY KEY,
nombre VARCHAR(100) NOT NULL
);
CRUD
Definición: CRUD significa crear, leer, actualizar y eliminar registros mediante INSERT, SELECT, UPDATE y DELETE. En sistemas bancarios, las escrituras deben aplicar permisos, validaciones y transacciones según las reglas del negocio.
Ejemplo:
INSERT INTO alertas (id_alerta, estado) VALUES (7, 'nueva');
SELECT estado FROM alertas WHERE id_alerta = 7;
UPDATE alertas SET estado = 'revisada' WHERE id_alerta = 7;
DELETE FROM alertas WHERE id_alerta = 7;
4. IA Y MACHINE LEARNING
Inteligencia Artificial (IA)
Definición: La IA comprende técnicas para que sistemas realicen tareas como percepción, razonamiento, generación o toma de decisiones. No toda IA aprende de datos; algunos sistemas siguen reglas explícitas.
Ejemplo:
def bloquear_por_regla(pais, importe):
return pais in {"PAIS_SANCIONADO"} and importe > 0
Machine Learning (ML)
Definición: ML es una rama de IA donde los algoritmos aprenden patrones a partir de datos para producir predicciones o decisiones. Su desempeño depende de la representatividad, calidad y disponibilidad de los datos.
Ejemplo:
from sklearn.ensemble import RandomForestClassifier
modelo = RandomForestClassifier(random_state=42)
modelo.fit(X_train, y_train)
Deep Learning (DL)
Definición: DL es una subárea de ML que utiliza redes neuronales con múltiples capas para aprender representaciones complejas. Es frecuente en texto, imagen, voz y documentos, y suele requerir más datos y cómputo que modelos clásicos.
Ejemplo:
from sklearn.neural_network import MLPClassifier
modelo = MLPClassifier(hidden_layer_sizes=(32, 16), max_iter=500, random_state=42)
modelo.fit(X_train, y_train)
Aprendizaje supervisado
Definición: El aprendizaje supervisado entrena con ejemplos que incluyen características y una etiqueta objetivo conocida. Se usa, por ejemplo, para estimar incumplimiento o clasificar transacciones etiquetadas.
Ejemplo:
X = solicitudes[["ingreso", "antiguedad_meses"]]
y = solicitudes["incumplio"] # etiqueta histórica: 0 o 1
Aprendizaje no supervisado
Definición: El aprendizaje no supervisado busca estructura en datos sin una etiqueta objetivo proporcionada. Puede usarse para segmentar clientes o detectar observaciones inusuales, pero los resultados requieren interpretación y validación de negocio.
Ejemplo:
from sklearn.cluster import KMeans
etiquetas = KMeans(n_clusters=3, random_state=42, n_init="auto").fit_predict(X_scaled)
Clasificación
Definición: La clasificación predice una categoría discreta, como fraude/no fraude o documento válido/inválido. En problemas desbalanceados, la exactitud por sí sola puede ocultar un mal desempeño en la clase minoritaria.
Ejemplo:
from sklearn.linear_model import LogisticRegression
clasificador = LogisticRegression(max_iter=1000).fit(X_train, y_train)
predicciones = clasificador.predict(X_test)
Regresión
Definición: La regresión estima un valor numérico continuo, como pérdida esperada o monto de reclamación. Se evalúa con métricas de error y debe compararse con una línea base sencilla.
Ejemplo:
from sklearn.linear_model import LinearRegression
regresor = LinearRegression().fit(X_train, y_train)
montos_estimados = regresor.predict(X_test)
Entrenamiento, validación y prueba
Definición: Entrenamiento ajusta parámetros; validación sirve para seleccionar modelos e hiperparámetros; prueba estima el desempeño final en datos no usados durante esas decisiones. Dividir antes de ajustar y evitar fugas de información produce métricas más fiables.
Ejemplo:
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, stratify=y, random_state=42)
X_train, X_val, y_train, y_val = train_test_split(X_train, y_train, test_size=0.25, stratify=y_train, random_state=42) # 60/20/20
Preprocesamiento de datos
Definición: El preprocesamiento convierte datos crudos en características utilizables por un modelo, por ejemplo imputando nulos y escalando variables. Los transformadores se ajustan solo con el conjunto de entrenamiento para prevenir fuga de información.
Ejemplo:
from sklearn.preprocessing import StandardScaler
escalador = StandardScaler().fit(X_train)
X_train_scaled = escalador.transform(X_train)
X_test_scaled = escalador.transform(X_test)
Selección de características
Definición: La selección de características reduce o elige variables relevantes para mejorar generalización, eficiencia o interpretabilidad. La selección debe realizarse dentro del proceso de entrenamiento, no mirando el conjunto de prueba.
Ejemplo:
from sklearn.feature_selection import SelectKBest, f_classif
selector = SelectKBest(f_classif, k=5).fit(X_train, y_train)
X_train_sel = selector.transform(X_train)
Entrenamiento de modelos
Definición: Entrenar consiste en ajustar los parámetros del algoritmo a partir de ejemplos y una función objetivo. Se separa del uso posterior del modelo para que la inferencia pueda operar sobre datos nuevos.
Ejemplo:
from sklearn.ensemble import RandomForestClassifier
modelo = RandomForestClassifier(n_estimators=100, random_state=42)
modelo.fit(X_train, y_train)
Predicción e inferencia
Definición: La predicción es la salida estimada para una entrada; inferencia es la ejecución del modelo ya entrenado sobre datos nuevos. En producción deben mantenerse iguales las transformaciones y el orden de características usados durante entrenamiento.
Ejemplo:
prob_fraude = modelo.predict_proba(X_nueva)[:, 1]
alerta = prob_fraude >= 0.80
Sobreajuste (overfitting)
Definición: Ocurre cuando el modelo aprende demasiado los detalles del entrenamiento, incluido ruido, y generaliza mal a datos nuevos. Se detecta comparando desempeño de entrenamiento y validación; puede mitigarse con regularización, más datos o modelos menos complejos.
Ejemplo:
# Una brecha grande entre ambas métricas sugiere sobreajuste
print(modelo.score(X_train, y_train), modelo.score(X_val, y_val))
Subajuste (underfitting)
Definición: Ocurre cuando el modelo no captura suficientemente los patrones y rinde mal tanto en entrenamiento como en validación. Puede mitigarse con mejores características, un modelo más expresivo o un ajuste adecuado.
Ejemplo:
from sklearn.linear_model import LogisticRegression
modelo_simple = LogisticRegression(max_iter=1000).fit(X_train, y_train)
print(modelo_simple.score(X_train, y_train), modelo_simple.score(X_val, y_val))
Métricas de evaluación
Definición: En clasificación se usan precision, recall, F1, matriz de confusión y ROC-AUC; en regresión, MAE, MSE o RMSE. La métrica adecuada depende del costo de falsos positivos y falsos negativos del caso bancario.
Ejemplo:
from sklearn.metrics import classification_report, confusion_matrix
print(confusion_matrix(y_test, predicciones))
print(classification_report(y_test, predicciones, zero_division=0))
scikit-learn
Definición: scikit-learn ofrece API consistentes para preprocesamiento, división de datos, entrenamiento, selección de modelos y evaluación. fit, transform, predict y predict_proba son métodos frecuentes del flujo de trabajo.
Ejemplo:
from sklearn.pipeline import make_pipeline
from sklearn.impute import SimpleImputer
pipeline = make_pipeline(SimpleImputer(strategy="median"), RandomForestClassifier(random_state=42))
pipeline.fit(X_train, y_train)
Regresión lineal
Definición: La regresión lineal estima una variable numérica como combinación lineal de características y parámetros. Es interpretable como línea base, pero sus supuestos y errores deben revisarse para el conjunto concreto.
Ejemplo:
from sklearn.linear_model import LinearRegression
modelo = LinearRegression().fit(X_train, y_train)
print(modelo.predict(X_test[:2]))
Regresión logística
Definición: La regresión logística modela la probabilidad de una clase, habitualmente mediante la función logística, y luego aplica un umbral para clasificar. Aunque se llama regresión, se usa principalmente para clasificación.
Ejemplo:
from sklearn.linear_model import LogisticRegression
modelo = LogisticRegression(max_iter=1000).fit(X_train, y_train)
probabilidades = modelo.predict_proba(X_test)[:, 1]
Árboles de decisión
Definición: Un árbol divide los datos mediante reglas sobre características y permite inspeccionar rutas de decisión. Puede sobreajustarse si crece demasiado; profundidad mínima, tamaño de hoja y poda ayudan a controlarlo.
Ejemplo:
from sklearn.tree import DecisionTreeClassifier
modelo = DecisionTreeClassifier(max_depth=4, min_samples_leaf=20, random_state=42)
modelo.fit(X_train, y_train)
5. NLP: PROCESAMIENTO DEL LENGUAJE NATURAL
Fundamentos de NLP
Definición: NLP reúne técnicas para procesar y analizar lenguaje humano en texto o voz. En banca puede clasificar motivos de reclamación, extraer entidades o enrutar solicitudes.
Ejemplo:
from sklearn.feature_extraction.text import TfidfVectorizer
textos = ["cargo no reconocido", "solicito estado de cuenta"]
X_texto = TfidfVectorizer().fit_transform(textos)
Limpieza de texto
Definición: La limpieza elimina o corrige elementos irrelevantes según la tarea, como espacios sobrantes, caracteres de control o formatos inconsistentes. No deben quitarse símbolos como decimales, signos o identificadores si contienen información relevante.
Ejemplo:
texto = " CARGO NO reconocido\n"
limpio = " ".join(texto.strip().lower().split())
Tokenización
Definición: Tokenizar divide el texto en unidades, como palabras, subpalabras o signos de puntuación. La estrategia de tokenización afecta cómo el modelo representa cantidades, fechas y términos financieros.
Ejemplo:
from nltk.tokenize import wordpunct_tokenize
tokens = wordpunct_tokenize("Cargo de $1,250.50 rechazado")
Stopwords
Definición: Las stopwords son palabras frecuentes que algunas tareas pueden ignorar por aportar poca señal discriminativa. No deben eliminarse automáticamente si afectan el sentido, por ejemplo negaciones como “no”.
Ejemplo:
texto = "no autorizo el cargo"
stopwords_es = {"el", "la", "de", "un", "una"}
tokens = [t for t in texto.split() if t not in stopwords_es]
Stemming
Definición: El stemming reduce una palabra mediante reglas heurísticas y puede producir una raíz que no sea una palabra válida. Es rápido, pero menos lingüísticamente preciso que la lematización.
Ejemplo:
from nltk.stem import SnowballStemmer
stemmer = SnowballStemmer("spanish")
print(stemmer.stem("transferencias"))
Lematización
Definición: La lematización convierte una palabra a su lema lingüístico usando información léxica y, según la herramienta, gramatical. Suele preservar formas más interpretables que el stemming, aunque puede requerir modelos de idioma.
Ejemplo:
import spacy
nlp = spacy.load("es_core_news_sm")
doc = nlp("Los clientes reclamaron cargos duplicados")
print([token.lemma_ for token in doc])
Normalización de texto
Definición: La normalización unifica representaciones equivalentes, por ejemplo minúsculas, espacios, Unicode o formatos de fechas. Debe ajustarse a la tarea: normalizar identificadores o cifras de forma incorrecta puede destruir información.
Ejemplo:
import unicodedata
texto = unicodedata.normalize("NFKC", " TRANSFERENCIA ").strip().casefold()
Extracción de información
Definición: La extracción de información identifica campos estructurados en texto libre, como fechas, importes, cuentas o nombres de entidades. Los valores extraídos deben validarse contra reglas del dominio y conservar su procedencia.
Ejemplo:
import re
texto = "Importe reclamado: MXN 1250.50"
importe = re.search(r"MXN\s+(\d+(?:\.\d{2})?)", texto).group(1)
Expresiones regulares (Regex)
Definición: Regex define patrones para localizar o validar cadenas según una sintaxis de búsqueda. Es útil para formatos conocidos, pero una coincidencia de patrón no garantiza que el dato sea correcto semánticamente.
Ejemplo:
import re
folio = re.fullmatch(r"TRX-\d{6}", "TRX-123456")
print(folio is not None)
NLTK
Definición: NLTK es una biblioteca de Python para procesamiento lingüístico y recursos como tokenizadores, corpus y stemmers. Resulta útil para tareas educativas o pipelines clásicos de texto.
Ejemplo:
from nltk.tokenize import word_tokenize
# Requiere el recurso punkt apropiado instalado para la versión de NLTK
tokens = word_tokenize("Pago de tarjeta rechazado", language="spanish")
spaCy
Definición: spaCy es una biblioteca de NLP orientada a pipelines eficientes con tokenización, análisis gramatical y reconocimiento de entidades nombradas. El idioma y el modelo instalado deben corresponder al texto que se procesa.
Ejemplo:
import spacy
nlp = spacy.load("es_core_news_sm")
doc = nlp("Banco del Centro reportó 25 reclamaciones")
print([(e.text, e.label_) for e in doc.ents])
6. OCR Y PROCESAMIENTO DE DOCUMENTOS
OCR (reconocimiento óptico de caracteres)
Definición: OCR convierte texto presente en imágenes o páginas escaneadas en texto digital, y puede producir errores por baja resolución, inclinación o calidad del documento. NLP interpreta el texto; OCR lo reconoce visualmente, por lo que son etapas distintas.
Ejemplo:
# La imagen debe estar disponible en disco y contener texto legible
import pytesseract
from PIL import Image
texto = pytesseract.image_to_string(Image.open("estado_cuenta.png"), lang="spa")
Tesseract OCR
Definición: Tesseract es un motor OCR que reconoce caracteres en imágenes y puede usarse desde Python con pytesseract. Requiere tener instalado el ejecutable Tesseract y los datos de idioma correspondientes.
Ejemplo:
import pytesseract
texto = pytesseract.image_to_string("factura.png", lang="spa")
print(texto[:300])
Extracción de texto de documentos
Definición: La extracción obtiene texto y campos a partir de documentos digitales o escaneados, combinando bibliotecas de PDF, OCR, regex y validaciones. Un campo importante debe conservar página, confianza o evidencia de origen cuando sea posible.
Ejemplo:
import re
texto = "Cuenta: 0012345678\nTotal MXN 890.00"
cuenta = re.search(r"Cuenta:\s*(\d+)", texto).group(1)
Procesamiento de PDF
Definición: Un PDF puede contener texto digital, imágenes escaneadas o ambos; la estrategia depende de su contenido. Extraer texto directamente es preferible cuando existe una capa textual y se usa OCR cuando solo hay imágenes.
Ejemplo:
from pypdf import PdfReader
lector = PdfReader("estado_cuenta.pdf")
texto = "\n".join(p.extract_text() or "" for p in lector.pages)
PyPDF2
Definición: PyPDF2 es una biblioteca Python para leer y manipular PDFs, incluyendo extracción de texto cuando el documento contiene una capa textual. No es un motor OCR, por lo que las páginas escaneadas pueden necesitar OCR aparte.
Ejemplo:
from PyPDF2 import PdfReader
lector = PdfReader("contrato.pdf")
texto = "\n".join(p.extract_text() or "" for p in lector.pages)
Validación de datos extraídos
Definición: Validar datos extraídos comprueba formato, rangos, consistencia y reglas del negocio antes de aceptarlos. En documentos financieros conviene contrastar totales, moneda, fechas y cuentas; un valor OCR plausible puede seguir siendo incorrecto.
Ejemplo:
from decimal import Decimal
importe = Decimal("890.00")
assert importe >= 0 and importe.as_tuple().exponent == -2
7. APIs REST Y PRUEBAS
Fundamentos de APIs REST
Definición: Una API REST expone recursos mediante HTTP y suele intercambiar datos en JSON; los recursos se identifican por URI y los métodos expresan la operación solicitada. La autenticación, autorización, validación y registro seguro son esenciales en un entorno bancario.
Ejemplo:
import requests
respuesta = requests.get("https://api.ejemplo.test/clientes/1042", timeout=10)
respuesta.raise_for_status()
cliente = respuesta.json()
Métodos HTTP
Definición: GET consulta; POST suele crear o ejecutar una operación; PUT reemplaza un recurso; PATCH modifica parcialmente; DELETE elimina. Idempotencia y efectos exactos dependen del método y del contrato de la API.
Ejemplo:
import requests
requests.get("https://api.ejemplo.test/clientes/1042", timeout=10)
requests.post("https://api.ejemplo.test/alertas", json={"cliente_id": 1042}, timeout=10)
Códigos de estado HTTP
Definición: Los códigos indican el resultado de una petición: 2xx éxito, 3xx redirección, 4xx problema de solicitud o permisos y 5xx fallo del servidor. Por ejemplo, 200 es OK, 201 creado, 400 solicitud inválida, 401 no autenticado, 403 prohibido, 404 no encontrado y 500 error interno.
Ejemplo:
if respuesta.status_code == 200:
datos = respuesta.json()
elif respuesta.status_code == 404:
datos = None
JSON en APIs
Definición: JSON representa objetos y arreglos de datos y es un formato habitual de solicitud y respuesta en APIs. Validar presencia, tipo y rango de cada campo evita aceptar cargas malformadas o inconsistentes.
Ejemplo:
import requests
payload = {"cuenta": "001234", "importe": 125.50, "moneda": "MXN"}
respuesta = requests.post("https://api.ejemplo.test/transacciones", json=payload, timeout=10)
Pruebas unitarias
Definición: Una prueba unitaria verifica una unidad pequeña de código de forma aislada, normalmente con entradas y resultados esperados. Debe probar casos normales, límites y errores sin depender de servicios externos reales.
Ejemplo:
def es_importe_valido(x): return x > 0
def test_es_importe_valido():
assert es_importe_valido(10)
assert not es_importe_valido(0)
Pruebas de integración
Definición: Una prueba de integración comprueba que varios componentes colaboran correctamente, por ejemplo API, base de datos y procesamiento de datos. A diferencia de la prueba unitaria, verifica contratos e interacciones entre componentes.
Ejemplo:
def test_api_devuelve_alerta(client):
r = client.get("/alertas/7")
assert r.status_code == 200 and r.json["id"] == 7
Depuración de errores en APIs y pruebas
Definición: Depurar implica reproducir el fallo, inspeccionar logs y entradas, aislar la causa y verificar una corrección con pruebas. No deben registrarse contraseñas, tokens ni datos personales completos en logs.
Ejemplo:
import logging, requests
logger = logging.getLogger(__name__)
try:
respuesta.raise_for_status()
except requests.RequestException as error:
logger.error("Fallo de API: %s", type(error).__name__)
raise
8. GIT Y GITHUB
Control de versiones
Definición: El control de versiones registra cambios a lo largo del tiempo y permite comparar, recuperar y colaborar sobre el código. Git es un sistema distribuido: cada clon conserva el historial del repositorio.
Ejemplo:
git status
git log --oneline -5
git clone
Definición: git clone crea una copia local de un repositorio remoto con su historial. Se utiliza normalmente al comenzar a trabajar en un proyecto existente.
Ejemplo:
git clone https://github.com/organizacion/proyecto.git
git add
Definición: git add prepara cambios para el siguiente commit en el área de staging. Conviene revisar exactamente qué archivos se agregan, especialmente si pueden contener credenciales o datos sensibles.
Ejemplo:
git add src/modelo.py tests/test_modelo.py
git status
git commit
Definición: git commit guarda en el historial una instantánea de los cambios staged con un mensaje descriptivo. Un commit local todavía no publica los cambios al repositorio remoto.
Ejemplo:
git commit -m "Valida importes extraídos de estados de cuenta"
git push
Definición: git push publica commits locales en una rama remota. Puede ser rechazado si el historial remoto avanzó o si no se tienen permisos.
Ejemplo:
git push origin feature/validacion-documentos
git pull
Definición: git pull incorpora cambios del remoto a la rama actual, normalmente mediante fetch y merge o rebase según la configuración. Revisar el estado de trabajo antes de ejecutarlo ayuda a evitar conflictos inesperados.
Ejemplo:
git pull origin main
Ramas (branches)
Definición: Una rama es una referencia móvil a una línea de desarrollo que permite trabajar en cambios aislados. Los nombres descriptivos facilitan revisar funciones, correcciones y experimentos.
Ejemplo:
git switch -c feature/clasificador-reclamaciones
git switch main
Resolución de conflictos
Definición: Un conflicto ocurre cuando Git no puede combinar cambios automáticamente; se deben revisar los bloques conflictivos y conservar la lógica correcta de ambas modificaciones. Después se marcan los archivos resueltos y se completa el merge o rebase.
Ejemplo:
git status
# Editar archivos con marcadores <<<<<<<, =======, >>>>>>>
git add archivo_resuelto.py
git commit
Pull requests
Definición: Un pull request propone integrar cambios de una rama en otra para revisión, discusión y ejecución de controles automáticos. La revisión debe valorar corrección, pruebas, seguridad, calidad de datos y efectos sobre el modelo.
Ejemplo:
git push origin feature/clasificador-reclamaciones
# Abrir un Pull Request en GitHub y solicitar revisión
9. DEVOPS Y METODOLOGÍAS ÁGILES
DevOps
Definición: DevOps integra prácticas de desarrollo y operación para entregar software de forma frecuente, segura, monitorizable y reproducible. Incluye automatización de pruebas, despliegue, observabilidad y gestión de configuración.
Ejemplo:
# Ejecutar pruebas de forma repetible en el entorno del proyecto
python -m pytest
Integración continua (CI)
Definición: CI ejecuta automáticamente controles sobre cada cambio integrado, como pruebas, análisis estático y validaciones. Busca detectar errores pronto y mantener la rama compartida en un estado verificable.
Ejemplo:
# Comando típico en un pipeline CI
python -m pip install -r requirements.txt
python -m pytest
Entrega continua (CD)
Definición: La entrega continua automatiza el empaquetado y validación para mantener una versión lista para desplegar; el despliegue continuo va más allá y publica automáticamente cambios que superan los controles. En banca, aprobaciones y segregación de funciones dependen de los controles internos.
Ejemplo:
# Pasos conceptuales del pipeline
python -m pytest
python -m build
Scrum
Definición: Scrum es un marco ágil de trabajo iterativo que organiza el desarrollo en Sprints y define responsabilidades, eventos y artefactos. Busca entregar incrementos de valor e inspeccionar el progreso de manera frecuente.
Ejemplo:
# Ejemplo de Product Backlog
"Como analista, quiero extraer el total de una factura para validar reclamaciones."
Sprints
Definición: Un Sprint es un periodo fijo, de un mes o menos, durante el cual el equipo crea un incremento útil y potencialmente liberable. El objetivo del Sprint da foco al trabajo y evita cambios que lo pongan en riesgo.
Ejemplo:
# Objetivo de Sprint
"Clasificar reclamaciones por motivo y medir F1 en un conjunto de validación."
Daily Scrum
Definición: El Daily Scrum es un evento diario de 15 minutos para que los Developers inspeccionen el avance hacia el objetivo del Sprint y adapten el plan. No es un reporte de estatus al gerente ni una sesión para resolver todos los problemas.
Ejemplo:
# Actualización breve del equipo
"Ayer validé OCR; hoy revisaré importes; bloqueo: PDF con texto ilegible."
Sprint Planning
Definición: Sprint Planning define por qué el Sprint es valioso, qué trabajo puede realizarse y cómo se abordará. El equipo selecciona trabajo según prioridad, capacidad y definición de terminado.
Ejemplo:
# Criterio de aceptación de una historia
"El extractor devuelve importe y moneda; los campos inválidos generan error auditable."
10. RECORDATORIOS TÉCNICOS CLAVE PARA BANCA
Fuga de información (data leakage)
Definición: Hay fuga cuando el entrenamiento usa información que no estaría disponible al momento real de la predicción o que proviene indirectamente del conjunto de prueba. Genera métricas artificialmente altas y debe prevenirse en la división temporal, las transformaciones y la selección de variables.
Ejemplo:
# Ajustar transformaciones con entrenamiento, no con todos los datos
imputer.fit(X_train)
X_train_ok = imputer.transform(X_train)
X_test_ok = imputer.transform(X_test)
Desbalance de clases
Definición: Existe cuando una clase, por ejemplo fraude, aparece mucho menos que la clase mayoritaria. Evalúe precision, recall, F1, PR-AUC y umbrales según el coste de errores, en vez de confiar solo en accuracy.
Ejemplo:
from sklearn.metrics import average_precision_score
score = average_precision_score(y_test, modelo.predict_proba(X_test)[:, 1])
Trazabilidad y reproducibilidad
Definición: La trazabilidad conecta datos de entrada, transformaciones, versión del código y del modelo con cada resultado; la reproducibilidad permite repetir el proceso con las mismas condiciones. En sistemas bancarios favorece auditoría, diagnóstico y control de cambios.
Ejemplo:
import sklearn
print("sklearn", sklearn.__version__, "filas", len(X_train))
Seguridad de datos sensibles
Definición: Los datos personales, credenciales e información financiera deben procesarse con acceso mínimo, almacenamiento seguro y registro controlado. En ejemplos, pruebas y logs deben usarse datos ficticios o enmascarados y nunca secretos reales.
Ejemplo:
import os
api_token = os.environ["API_TOKEN"] # no escribir el token directamente en el código
© Arturo Juárez Monroy