Crear un modelo de aprendizaje profundo (Red Neuronal) que sea capaz de predecir el resultado de las elecciones autonómicas usando datos ficticios

Tiempo de lectura: 3 minutos

En este ejemplo vamos a construir un modelo de aprendizaje profundo utilizando TensorFlow para predecir el resultado de las votaciones autonómicas en base a los datos de las redes sociales de los candidatos. Utilizaremos una base de datos ficticia que consiste en los siguientes campos:

  • Edad: edad del candidato
  • Sexo: género del candidato (0 para hombre, 1 para mujer)
  • Twitter: cantidad de seguidores en Twitter del candidato
  • Facebook: cantidad de seguidores en Facebook del candidato
  • Instagram: cantidad de seguidores en Instagram del candidato
  • Resultado: resultado de las votaciones (0 para derrota, 1 para victoria)

Lo primero que haremos será importar las bibliotecas necesarias y cargar los datos:

import tensorflow as tf
import pandas as pd
import numpy as np

# Cargar los datos
data = pd.read_csv('datos_votaciones.csv')

A continuación, dividiremos los datos en un conjunto de entrenamiento y un conjunto de prueba:

# Dividir los datos en un conjunto de entrenamiento y un conjunto de prueba
train_data = data.sample(frac=0.8, random_state=0)
test_data = data.drop(train_data.index)

Luego, preprocesaremos los datos normalizando las características numéricas:

# Normalizar las características numéricas
mean = train_data.mean(axis=0)
std = train_data.std(axis=0)
train_data = (train_data - mean) / std
test_data = (test_data - mean) / std

A continuación, crearemos el modelo utilizando la API de alto nivel de TensorFlow tf.keras:

# Crear el modelo
model = tf.keras.Sequential([
    tf.keras.layers.Dense(32, activation='relu', input_shape=[5]),
    tf.keras.layers.Dense(16, activation='relu'),
    tf.keras.layers.Dense(1, activation='sigmoid')
])

Este modelo tiene una capa de entrada con 5 características, dos capas ocultas con activación ReLU y una capa de salida con activación sigmoide (ya que estamos realizando una tarea de clasificación binaria).

A continuación, compilamos el modelo con una función de pérdida de entropía cruzada binaria y un optimizador Adam:

# Compilar el modelo
model.compile(loss='binary_crossentropy',
              optimizer=tf.keras.optimizers.Adam(0.001),
              metrics=['accuracy'])

Finalmente, entrenamos el modelo durante 50 épocas utilizando los datos de entrenamiento:

# Entrenar el modelo
history = model.fit(train_data[['Edad', 'Sexo', 'Twitter', 'Facebook', 'Instagram']], train_data['Resultado'],
                    validation_data=(test_data[['Edad', 'Sexo', 'Twitter', 'Facebook', 'Instagram']], test_data['Resultado']),
                    epochs=50)

Ahora podemos utilizar el modelo entrenado para hacer predicciones en nuevos datos. Por ejemplo, para hacer una predicción en un candidato de 30 años, hombre, con 1000 seguidores en Twitter, 5000 seguidores en Facebook y 2000 seguidores en Instagram, podemos hacer lo siguiente:

La predicción obtenida mediante el modelo entrenado será una probabilidad, ya que utilizamos una activación sigmoide en la capa de salida. Para convertir esta probabilidad en una clasificación binaria, podemos establecer un umbral (por ejemplo, 0.5) y asignar una victoria si la probabilidad es mayor que el umbral y una derrota en caso contrario.

# Convertir la probabilidad en una clasificación binaria
threshold = 0.5
if prediction > threshold:
    print("El candidato ganará las elecciones")
else:
    print("El candidato perderá las elecciones")

Este es un ejemplo básico de cómo utilizar TensorFlow para crear un modelo de aprendizaje profundo que pueda predecir los resultados de las votaciones autonómicas utilizando datos de las redes sociales de los candidatos. Por supuesto, para obtener resultados más precisos, se necesitaría una base de datos más grande y compleja y un modelo más sofisticado con más capas y más neuronas.

Para generar datos ficticios de votaciones, podemos utilizar la biblioteca numpy de Python para generar datos aleatorios. A continuación, creamos una función que generará datos aleatorios para la base de datos:

import numpy as np
import pandas as pd

def generate_data(num_samples):
    # Generar datos aleatorios
    edad = np.random.randint(20, 75, num_samples)
    sexo = np.random.randint(0, 2, num_samples)
    twitter = np.random.randint(0, 1000000, num_samples)
    facebook = np.random.randint(0, 1000000, num_samples)
    instagram = np.random.randint(0, 1000000, num_samples)
    resultado = np.random.randint(0, 2, num_samples)

    # Crear un DataFrame de pandas con los datos
    data = pd.DataFrame({'Edad': edad, 'Sexo': sexo, 'Twitter': twitter, 'Facebook': facebook, 'Instagram': instagram, 'Resultado': resultado})

    return data

La función generate_data acepta un argumento num_samples que indica la cantidad de datos que se generarán. En este ejemplo, generaremos 1000 filas de datos.

data = generate_data(1000)

# Guardar los datos en un archivo CSV
data.to_csv('datos_votaciones.csv', index=False)

Esto generará un archivo llamado datos_votaciones.csv en el directorio de trabajo actual que contiene los datos ficticios de votaciones generados.

Deja un comentario