En los sistemas electorales de representación proporcional es necesario utilizar un algoritmo para asignar los escaños de las circunscripciones a los partidos o listas electorales. Convirtiendo así los votos en escaños. El método Sainte-Laguë, también conocido como el método Webster o el método de cociente y resto, es la opción que se utiliza en países como Alemania, Noruega, Suecia o Dinamarca. Siendo un método similar en funcionamiento al D’Hondt en el que solamente se usan divisores impares, lo que hace que los partidos más votados reciban menos escaños. En esta entrada se va a ver las bases del método Sainte-Laguë y como se puede implementar en Python.
El método Sainte-Laguë es un sistema para asignar escaños en sistemas de representación proporcional similar al método D’Hondt. La principal diferencia es que solamente usa divisores impares para calcular los cocientes que determinarán la asignación de escaños, esto es, 1, 3, 5, … Lo que debería favorecer a los partidos más pequeños respectó al al método D’Hondt. El procedimiento para asignar los escaños según el método Sainte-Laguë es:
El método Sainte-Laguë también se puede utilizar con un umbral electoral para evitar que los partidos que no superan un cierto porcentaje de votos obtengan escaños.
El método Sainte-Laguë solamente incluye un cambio respecto al método D’Hondt, el uso de divisores impares. Un cambio que se puede introducir fácilmente en la función implementada la semana pasada para el método D’Hondt. Lo que se muestra en el siguiente código.
def sainte_lague_method(votes, num_seats):
"""
Método para aplicar el método Sainte-Laguë y obtener la asignación de escaños.
Parámetros
----------
votes : array-like, shape (num_parties, )
Una lista o array con los votos obtenidos por cada partido.
num_seats : int
Número total de escaños a asignar.
Retorna
-------
seats : array, shape (num_parties,)
Una lista con el número de escaños asignados a cada partido.
"""
num_parties = len(votes)
# Inicializar la asignación de escaños a cero
seats = [0] * num_parties
# Realizar el proceso de asignación de escaños
for _ in range(num_seats):
max_index = max(range(num_parties), key=lambda i: votes[i] / (2 * seats[i] + 1))
seats[max_index] += 1
return seats En este ejemplo lo primero que se hace es calcular el número de partidos en base a la lista de votos. Luego se crea una lista de escaños para cada uno de los partidos inicializada a cero. Finalmente, se hace una iteración en la que se asignan los escaños a la lista con los restos más altos.
Notase que la única diferencia con el método de D’Hondt se encuentra en la línea 25. En esta línea, para el método de D’Hondt el divisor era seats[i] + 1, donde seats[i] es el número de escaños asignados hasta ese momento a la lista i. Para el método Sainte-Laguë se usa 2 * seats[i] + 1.
Se puede evaluar la implementación del método Sainte-Laguë y cómo varían los resultados en comparación con el método de D’Hondt. Por ejemplo, se puede ver en una circunscripción pequeña en la que solamente se reparten 4 escaños. (El código de la función dhondt_method y sus detalles se pueden ver en esta entrada o en el apéndice).
votes = [15000, 12000, 8000, 6000, 2000, 1200]
print("D'Hondt: ", dhondt_method(votes, 4))
print("Sainte-Laguë: ", sainte_lague_method(votes, 4)) D'Hondt: [2, 1, 1, 0, 0, 0] Sainte-Laguë: [1, 1, 1, 1, 0, 0]
En este ejemplo se puede ver como el método D’Hondt beneficia al partido más votado con un escaño adicional respecto a lo que ofrece el método Sainte-Laguë. Escaño que pierde la cuarta lista. Esto es así porque a la hora de repartir el último escaño el método de D’Hondt 2 como divisor para el primer partido (15.000 / 2 = 7500), mientras que el Sainte-Laguë usar 3 (15.000 / 3 = 5000). Por lo que el método D’Hondt asigna el último escaño al primer partido porque el cociente supera a los 6000 del cuarto, lo que no es así en el caso del método Sainte-Laguë.
Usando el mismo número de votos, si se repartieran 10 escaños no existirá diferencia entre el método D’Hondt y el de Sainte-Laguë. Lo que se puede ver en el siguiente ejemplo.
print("D'Hondt: ", dhondt_method(votes, 10))
print("Sainte-Laguë: ", sainte_lague_method(votes, 10)) D'Hondt: [4, 3, 2, 1, 0, 0] Sainte-Laguë: [4, 3, 2, 1, 0, 0]
Si se repartieran 35 escaños, habría un pequeño baile entre los partidos minoritarios. Aunque el reparto es similar.
print("D'Hondt: ", dhondt_method(votes, 35))
print("Sainte-Laguë: ", sainte_lague_method(votes, 35)) D'Hondt: [12, 10, 6, 5, 1, 1] Sainte-Laguë: [12, 9, 6, 5, 2, 1]
En este caso el segundo partido pierde un escaño que recae sobre el quinto.
El método Sainte-Laguë es una alternativa al método D’Hondt para asignar los escaños en un sistema electoral. Como se ha visto en los ejemplos, el método Sainte-Laguë beneficia a los partidos pequeños respecto a los grandes. Algo que se aprecia especialmente en las circunscripciones pequeñas donde hay pocos asientos en juego.
La implementación de la función dhondt_method que se explicó en una publicación sobre el método D’Hondt es:
def dhondt_method(votes, num_seats):
"""
Método para aplicar el método D'Hondt y obtener la asignación de escaños.
Parámetros
----------
votes : array-like, shape (num_parties, )
Una lista o array con los votos obtenidos por cada partido.
num_seats : int
Número total de escaños a asignar.
Retorna
-------
seats : array, shape (num_parties,)
Una lista con el número de escaños asignados a cada partido.
"""
num_parties = len(votes)
# Inicializar la asignación de escaños a cero
seats = [0] * num_parties
# Realizar el proceso de asignación de escaños
for _ in range(num_seats):
max_index = max(range(num_parties), key=lambda i: votes[i] / (seats[i] + 1))
seats[max_index] += 1
return seats Imágenes: Unsplash (Arnaud Jaegers)
En un entrada previa explicamos qué son el WOE y el IV y por qué…
Seguimos evolucionando el laboratorio de Analytics Lane y hoy lanzamos la versión 1.1, disponible en:…
“El interés compuesto es la octava maravilla del mundo. El que lo entiende lo gana…
Tienes los datos de ventas de tres productos en dos años distintos y quieres saber…
Imagina la situación. Tu equipo lleva tres años con un modelo en producción. No es…
Cuando un banco evalúa una solicitud de crédito necesita responder a una pregunta aparentemente simple:…
This website uses cookies.