Machine Learning en Python: De Cero a Producción
12 min
Por Álvaro Efren Bolaños
Machine Learning en Python: Tu Guía Completa
El Machine Learning ha revolucionado la forma en que procesamos y analizamos datos. En esta guía completa, te llevaremos desde los conceptos básicos hasta la implementación en producción.
🎯 ¿Qué es Machine Learning?
Machine Learning es una rama de la inteligencia artificial que permite a las computadoras aprender y tomar decisiones basadas en datos, sin ser programadas explícitamente para cada tarea específica.
Tipos de ML
-
Aprendizaje Supervisado
- Clasificación
- Regresión
-
Aprendizaje No Supervisado
- Clustering
- Reducción de dimensionalidad
-
Aprendizaje por Refuerzo
- Sistemas de recompensa
- Optimización de decisiones
🛠️ Herramientas Esenciales
Librerías Fundamentales
python1# Manipulación de datos 2import pandas as pd 3import numpy as np 4 5# Visualización 6import matplotlib.pyplot as plt 7import seaborn as sns 8 9# Machine Learning 10from sklearn.model_selection import train_test_split 11from sklearn.ensemble import RandomForestClassifier 12from sklearn.metrics import accuracy_score, classification_report 13 14# Deep Learning 15import tensorflow as tf 16from tensorflow import keras
Configuración del Entorno
bash1# Instalar dependencias 2pip install pandas numpy scikit-learn matplotlib seaborn jupyter 3 4# Para deep learning 5pip install tensorflow torch 6 7# Para visualización avanzada 8pip install plotly dash
📊 Proceso de ML: Paso a Paso
1. Exploración de Datos
python1# Cargar y explorar datos 2df = pd.read_csv('datos.csv') 3 4# Información básica 5print(df.info()) 6print(df.describe()) 7 8# Valores nulos 9print(df.isnull().sum()) 10 11# Visualización 12sns.heatmap(df.corr(), annot=True, cmap='coolwarm') 13plt.show()
2. Preprocesamiento
python1from sklearn.preprocessing import StandardScaler, LabelEncoder 2 3# Escalado de características 4scaler = StandardScaler() 5X_scaled = scaler.fit_transform(X) 6 7# Codificación de variables categóricas 8le = LabelEncoder() 9y_encoded = le.fit_transform(y) 10 11# División train/test 12X_train, X_test, y_train, y_test = train_test_split( 13 X_scaled, y_encoded, test_size=0.2, random_state=42 14)
3. Entrenamiento del Modelo
python1# Crear y entrenar modelo 2model = RandomForestClassifier(n_estimators=100, random_state=42) 3model.fit(X_train, y_train) 4 5# Predicciones 6y_pred = model.predict(X_test) 7 8# Evaluación 9accuracy = accuracy_score(y_test, y_pred) 10print(f'Precisión: {accuracy:.2f}') 11print(classification_report(y_test, y_pred))
🚀 Casos de Uso Reales
1. Análisis de Sentimientos
python1from textblob import TextBlob 2 3def analyze_sentiment(text): 4 blob = TextBlob(text) 5 return blob.sentiment.polarity 6 7# Aplicar a reviews de productos 8df['sentiment'] = df['review'].apply(analyze_sentiment)
2. Predicción de Ventas
python1from sklearn.linear_model import LinearRegression 2 3# Features: precio, temporada, promociones 4X = df[['price', 'season', 'promotion']] 5y = df['sales'] 6 7# Modelo de regresión 8reg_model = LinearRegression() 9reg_model.fit(X_train, y_train) 10 11# Predicción 12sales_pred = reg_model.predict(X_test)
3. Detección de Anomalías
python1from sklearn.ensemble import IsolationForest 2 3# Modelo para detectar transacciones fraudulentas 4iso_forest = IsolationForest(contamination=0.1) 5anomalies = iso_forest.fit_predict(transaction_data)
🎛️ Optimización de Modelos
Hyperparameter Tuning
python1from sklearn.model_selection import GridSearchCV 2 3# Definir parámetros a probar 4param_grid = { 5 'n_estimators': [50, 100, 200], 6 'max_depth': [10, 20, None], 7 'min_samples_split': [2, 5, 10] 8} 9 10# Grid Search 11grid_search = GridSearchCV( 12 RandomForestClassifier(), 13 param_grid, 14 cv=5, 15 scoring='accuracy' 16) 17 18grid_search.fit(X_train, y_train) 19best_model = grid_search.best_estimator_
Validación Cruzada
python1from sklearn.model_selection import cross_val_score 2 3# Validación cruzada 4scores = cross_val_score(model, X, y, cv=5) 5print(f'Precisión promedio: {scores.mean():.2f} (+/- {scores.std() * 2:.2f})')
🌐 Puesta en Producción
1. Serialización del Modelo
python1import joblib 2 3# Guardar modelo 4joblib.dump(model, 'modelo_entrenado.pkl') 5 6# Cargar modelo 7loaded_model = joblib.load('modelo_entrenado.pkl')
2. API con Flask
python1from flask import Flask, request, jsonify 2import joblib 3 4app = Flask(__name__) 5model = joblib.load('modelo_entrenado.pkl') 6 7@app.route('/predict', methods=['POST']) 8def predict(): 9 data = request.json 10 prediction = model.predict([data['features']]) 11 return jsonify({'prediction': prediction.tolist()}) 12 13if __name__ == '__main__': 14 app.run(debug=True)
3. Monitoreo y Mantenimiento
python1# Métricas de monitoreo 2from sklearn.metrics import mean_squared_error 3import logging 4 5def monitor_model_performance(y_true, y_pred): 6 mse = mean_squared_error(y_true, y_pred) 7 8 if mse > threshold: 9 logging.warning(f'Model performance degraded: MSE = {mse}') 10 # Trigger retraining 11 retrain_model()
📈 Mejores Prácticas
1. Versionado de Datos y Modelos
- Usar DVC para versionado de datos
- MLflow para tracking de experimentos
- Git para código
2. Testing de ML
python1import pytest 2 3def test_model_accuracy(): 4 accuracy = model.score(X_test, y_test) 5 assert accuracy > 0.8, f"Model accuracy {accuracy} is below threshold" 6 7def test_prediction_shape(): 8 prediction = model.predict(X_test[:1]) 9 assert len(prediction) == 1, "Prediction shape is incorrect"
3. Documentación y Reproducibilidad
python1# requirements.txt 2pandas==1.3.0 3scikit-learn==1.0.0 4numpy==1.21.0 5 6# config.yaml 7model: 8 type: "RandomForest" 9 parameters: 10 n_estimators: 100 11 max_depth: 20
🔮 Tendencias Futuras
AutoML
- Automatización del pipeline completo
- Selección automática de algoritmos
- Hyperparameter tuning automático
MLOps
- CI/CD para modelos de ML
- Monitoreo en tiempo real
- A/B testing para modelos
Edge ML
- Modelos optimizados para dispositivos móviles
- Inferencia en tiempo real
- Privacidad de datos mejorada
¿Estás listo para implementar ML en tu próximo proyecto? ¡El futuro de los datos te espera!