En los sistemas de representación proporcional es necesario asignar a cada uno de los partidos o listas electorales un número de escaños en función de los votos recibidos. Uno de los métodos más utilizados es el método D’Hondt. Su objetivo es distribuir los escaños de manera proporcional a los votos obtenidos por cada partido o lista electoral. En esta entrada se verá en qué consiste el método D’Hondt y como se puede implementar en Python una función para asignar los escaños.
El método D’Hondt, también conocido como el sistema D’Hondt, fue desarrollado por el matemático belga Victor D’Hondt a finales del siglo XIX. Siendo un método ampliamente utilizado en la actualidad en diferentes sistemas electorales. El objetivo del método D’Hondt es encontrar una manera de distribuir los escaños de manera justa y proporcional en un parlamento en función de los votos obtenidos por cada uno de los partidos o listas electorales.
El procedimiento para asignar los escaños según el método D’Hondt es:
A medida que se asignan escaños, los cocientes de los partidos cambian, lo que afecta a la asignación de los escaños en las rondas posteriores.
El método D’Hondt se puede implementar fácilmente en Python mediante una función que solamente necesita el número de votos de cada partido en una lista y los escaños a repartir. Obteniendo como resultado el número de escaños asignados a cada partido. Una posible implementación de esta función puede ser la que se muestra a continuación.
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 En esta función primero se calcula el número de partidos a partir de la lista de votos. Una vez hecho esto se crea una lista en la que se cargará el número de asientos asignados a cada uno de los partidos o listas electorales. Posteriormente se inicia un bucle en el que en cada iteración se asignará el escaño a la lista con el resto más alto.
Ahora se puede ejecutar el código para ver cómo se reparten diferentes número de escaños entre varios partidos o listas electorales.
votes = [15000, 12000, 8000, 6000, 2000, 1200] print(dhondt_method(votes, 4)) print(dhondt_method(votes, 10)) print(dhondt_method(votes, 35))
[2, 1, 1, 0, 0, 0] [4, 3, 2, 1, 0, 0] [12, 10, 6, 5, 1, 1]
En España, al igual que en otros países, las leyes electorales aplican el método D’Hondt con ciertas peculiaridades que pueden afectar los resultados electorales. Las dos más importantes son:
Para adaptar la función a las peculiaridades de la ley electoral española solamente se deben incluir dos parámetros: los votos en blanco y el umbral. Con ambos valores se puede descartar aquellos partidos que no pasan el corte y no entran en el reparto de escaños. Una función modificada se puede ver en el siguiente código.
def dhondt_method_spain(votes, num_seats, blank_votes, threshold=0.03):
"""
Método para aplicar el método D'Hondt y obtener la asignación de escaños en
el sistema electoral español.
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.
blank_votes : int
Número total de votos en blanco emitidos
threshold : float, opcional
El umbral electoral en decimal (por ejemplo, 0.03 para 3%).
Por defecto, se asume un umbral del 3%.
Retorna
-------
seats : array, shape (n_parties,)
Una lista con el número de escaños asignados a cada partido.
"""
num_parties = len(votes)
# Aplicar el umbral electoral y obtener los partidos que superan el umbral
total_votes = sum(votes) + blank_votes
valid_parties = [i for i in range(num_parties) if votes[i] / total_votes >= threshold]
# Inicializar la asignación de escaños a cero para todos los partidos
seats = [0] * num_parties
# Realizar el proceso de asignación de escaños
for _ in range(num_seats):
max_index = max(valid_parties, key=lambda i: votes[i] / (seats[i] + 1))
seats[max_index] += 1
return seats La única modificación es la selección de los partidos válidos como aquellos que superan el umbral mínimo del 3% de voto sobre el total. Los que no superan este umbral se eliminan del reparto. Ahora se puede ver cómo afecta este cambio al reparto de escaños.
print(dhondt_method_spain(votes, 4, 1000)) print(dhondt_method_spain(votes, 10, 1000)) print(dhondt_method_spain(votes, 35, 1000))
[2, 1, 1, 0, 0, 0] [4, 3, 2, 1, 0, 0] [13, 10, 6, 5, 1, 0]
Tal como se puede apreciar en el ejemplo, respecto a cuando no se fija un umbral mínimo de votos para entrar en el reparto de escaños, sólo afecta a los resultados cuando el número de escaños es relativamente alto. Cuando la cantidad de escaños es inferior a 30, el propio funcionamiento del método D’Hondt exige un umbral mayor. En el ejemplo se puede ver como el último partido o lista electoral pierde el escaño por no alcanzar el 3%, incluyendo el voto el blanco solo alcanza un 2,6%. Escaño que en este caso se le asigna a la lista más votada.
El voto en blanco también puede afectar a los resultados, ya que esto puede hacer que algún partido se quede fuera del reparto. Esto se puede ver en el siguiente ejemplo.
print(dhondt_method_spain(votes, 4, 30000)) print(dhondt_method_spain(votes, 10, 30000)) print(dhondt_method_spain(votes, 35, 30000))
[2, 1, 1, 0, 0, 0] [4, 3, 2, 1, 0, 0] [13, 10, 7, 5, 0, 0]
Ahora el penúltimo partido o lista electoral también pierde el escaño debido al voto en blanco. Con 1000 votos en blanco esta tenía un 4,4% de los votos, pero si los votos en blanco son 30.000 solo tendrá un 2,6%, por lo que sale del reparto. En este caso es la tercera lista la que obtiene el escaño de esta.
El método D’Hondt es ampliamente utilizado para repartir los escaños de forma proporcional en diferentes sistemas electorales. En esta entrada se ha visto como se puede implementar en Python e incluir las modificaciones necesarias para utilizarlo con las peculiaridades de las leyes electorales españolas. Para aquellos que quieran una implementación del método en Excel pueden consultar la siguiente publicación.
Aunque el método D’Hondt es uno de los más utilizados, el concepto de asignación proporcional de escaños no es exclusivo de él. Existen otros métodos, como el método Sainte-Laguë o el método Hare-Niemeyer, que también se utilizan para lograr un reparto proporcional de escaños en diferentes sistemas electorales.
Imágenes: Unsplash (Arnaud Jaegers)
Hace poco publiqué una entrada en la que trataba de un sesgo bien documentado: aferrarse…
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…
This website uses cookies.