Bonjour,
Je bute, je m'arrache les cheveux. Je peine à trouver la bonne formule pour un problème qu'a priori je pensais simple, mais qui semble-t-il : est trop complexe pour moi..
Pour un ménage de deux personnes mari et femme, ou ce que l'on voudra, disons 2 personnes : Personne A et Personne B, quelle est la bonne formule pour calculer les justes contributions financières que l'une et de l'autre devrons apporter (si elles le souhaitent) relativement à leurs consommations, dépenses et frais divers de leur ménage, en fonction de leurs consommations, dépenses et frais divers respectifs (individuels et répartis), et de leurs dépenses respectives ?
Revenus A
Revenus B
Revenus A différents de Revenus B
Consommation, dépenses et frais A -------> Notons les CDF A
Consommation, dépenses et frais B -------> Notons les CDF B
CDF A différents de CDF B
Contribution A et Contribution B sont les inconnues du problème.
Si quelqu'un pourrait me mettre sur la voie. Ce serait super sympa. Merci d'avance
On appelle et les revenus respectifs et et les frais respectifs.
Ca dépend à quelle variable tu veux donner le plus de poids dans la réparition de ce qu'il reste. Par exemple, si tu veux que ce soit celui qui a les plus gros revenus qui paie le plus en proportion, tu poses et les proprtions de revenus respectives.
Alors si C est le montant total de la contribution, A devra payer et B devra payer , ce qui fera bien un total de .
Si tu veux prendre en compte seulement les frais, ce sera qu'il faudra poser.
Si tu veux prendre en compte le revenu disponible après les frais, ce sera .
Tu peux aussi t'amuser à faire des combinaisons barycentriques de tout cela, en prenant par exemple où pour donner plus ou moins d'importance à l'un où à l'autre. Et tu peux généraliser cela à où les sont des paramètres de ton choix et
Bonsoir,
le problème me semble mal posé.
On peut imaginer le cas extrême où A et B sont deux colocataires qui n'ont aucune relation autre que d'habiter au même endroit : la solution la plus juste est sans doute de partager le loyer en deux sans considération pour les revenus.
@ Ulmiere
Bonsoir,
Merci pour ta réponse Ulmiere.
Je vais voir si je peux me débrouiller en mettant des coefficients. C'est intéressant de procéder comme tu le suggères. Ceci dit ça me semble plutôt arbitraire.
En reprenant X pour A ou B selon que l'on fait le calcul pour A ou B, j'avais trouvé une formule :
Contribution de X = CDF X . (Revenus A / (Revenus A + Revenus de B)) . 2
(Rappel : avec CDF X pour Consommation, dépenses et frais de X)
Mais cette formule est fausse parce qu'en faisant le calcul de Contribution de A et de contribution de B, Contribution de A + Contribution de B ≠ CDF A + CDF B, ce qui pose problème..
--------------------------
@ verdurin ,
Bonsoir,
Oui, ce que les uns et les autres considèrent comme équitable est très variable des uns aux autres.
Je n'avais pas défini ce que j'entends par "équitable", c'est vrai.
Disons que je voudrais que la contribution de A et celle de B soient en fonction des revenus et des CDF de A et de B, mais sans y mêler d'autres arbitraires.
Alors je cherche encore...
C'est des maths, c'est pas des maths... Je posais un problème qui devait avoir une résolution mathématique, mais l'on vient me parler de politique et de purisme mathématique ? Ulmiere que je remercie m'a répondu respectueusement.
Bonjour,
Voilà à quoi e suis arrivé comme un grand :
Avec X pour A ou B selon que l'on fait le calcul pour A ou B
Contr X = Alpha . CDF X . Rev X / Total Rev
Avec
Alpha = (Total CDF + Total Rev) / (CDF A . Rev A + CDF B . Rev B)
Avec le coef ça résoud le problème évoqué plus haut, mais je ne sais pas si c'est correct de procéder ainsi.
C'est la même formule que celle que je t'ai donnée, à peu de choses près, appliquée à .
La seule différence, c'est qu'il y a un facteur qui traine devant.
Ce facteur est d'importance très marginale si la somme des revenus dépasse de loin la somme des frais, i.e si ta femme et toi arrivez ensemble à gagner plus que ce que vous dépensez.
Mais ça ne veut pas dire que ce soit juste pour autant, puisque si tu gagnes 10x plus qu'elle, ce facteur sera très faible aussi mais pas grâce à elle.
L'autre problème, plus grave, c'est que la somme des contributions avec ta formule, est justement , où est le facteur dont je parle plus haut.
Donc ta formule de partage est incorrecte! La somme de vos proportions de contribution n'est pas égale à 1
Bonjour Ulmière,
Merci pour ta réponse.
Ok, donc je ne suis pas encore au bout de mes peines...
Comment faire pour régler ce problème ? Je suis perdu.
Le mieux est de faire au plus simple et de se concentrer sur le cas simple de deux personnes et une seule fonction u.
Une fois donnée la fonction u qui soit
* à valeurs réelles
* définie sur {a,b}
* fixée par tes soins
* telle que u(a) + u(b) != 0
Tu peux définir une autre fonction q, sur le même ensemble, par q(x) = u(x) / (u(a)+u(b)).
Cette fonction est (automatiquement) à valeurs dans [0,1] et vérifie q(a)+q(b) = 1.
La contribution de a au paiement de C sera q(a) * C, et de même, celle de b sera q(b) * C.
La seule que tu as à faire, c'est de trouver une bonne fonction u, mais ça il n'y a que toi qui puisses le faire, ça dépend de ce que tu veux prendre en compte ou privilégier parmi tes paramètres. Je t'en ai proposé quelques unes dans ma première réponse
* u = r, pour ne prendre en compte que le revenu
* u = f, pour ne prendre en compte que les frais
* u = r - f, pour ne prendre en compte que le revenu restant après paiement des frais
* u = α r + (1-α) f pour prendre en compte les deux, mais avec un coefficient alpha de ton choix qui donne plus de poids à l'un ou l'autre
Tu es libre de rendre u aussi complexe que tu veux, tant qu'elle respecte les conditions que je t'ai énoncées
Bonsoir Ulmiere,
J'ai essayé différentes choses à partir de tes indications dans le dernier post, mais j'aboutis toujours à des résultats incohérents.
Sinon j'ai testé et retesté ma formule avec plein de valeurs différentes. Et contrairement à ce que tu as dit, elle me donne à chaque fois des contributions de A et de B dont la somme est égale à celle des frais et dépenses de A et de B.
Alors je ne sais pas..
Erratum :
J'ai relu, il semble que tu parlais d'autre chose..
Je suis perdu.
(À savoir : je n'ai pas l'habitude de faire des maths et j'ai tout oublié de mes cours de lycée.)
Voici un code qui t'aidera peut-être à y voir plus clair.
Tu peux le copier-coller ici (https://www.online-python.com/) pour l'exécuter
import numpy as np
def somme_ponderee(coeffs, *parametres):
"""
Une fonction u qui se contente de faire la somme pondérée des parametres
`parametres` est un tuple (ou une liste) de taille m, composé de listes de taille n
`coeffs` est un tuple (ou une liste) de taille m
"""
m = len(coeffs)
if m == 0 or len(parametres) != m:
raise ValueError(f"Erreur: le nombre de paramètres ({len(parametres)}) et le nombre de coefficients ({m}) ne coincident pas ou ce nombre est égal à 0")
n = len(parametres[0])
if any(len(param) != n for param in parametres):
raise ValueError(f"Erreur: les parametres n'ont pas tous la même taille {n}")
U = np.array(coeffs)
p = tuple(np.array(p) for p in parametres)
P = np.stack(p)
return np.dot(U, P)
def q(u):
"""
Etant donné une liste (ou tuple) u de réels positifs,
calcule la proportion que représente chaque valeur
"""
s = sum(np.array(u))
if len(u.shape) != 1 or s == 0:
raise ValueError(f"Erreur: sum_X u_X = 0, ou bien u n'a pas la bonne forme (u.shape = {u.shape})")
if np.any(u < 0):
raise ValueError("Erreur: u contient des valeurs négatives")
return u / s
def repartition(contributions, u):
"""
Etant donné un tuple (ou liste) `contributions` de trucs à payer (tous positifs), de taille k
et un vecteur `u` de pouvoir d'achat, de taille n (nombre de personnes),
calcule la juste contribution que chaque personne devra payer
"""
contributions = np.array(contributions)
if np.any(contributions < 0):
raise ValueError("Erreur: les contributions doivent toutes être positives ou nulles")
proportions = q(u)
return np.stack(tuple( c*proportions for c in contributions ))
#################################
if __name__ == "__main__":
revenus = [5_000, 2_800]
frais = [1_400, 950]
# c'est la même chose que [r-f for r,f in zip(revenus, frais)], mais généralisable à un nombre quelconque de variables
u = somme_ponderee([1,-1], revenus, frais)
contributions = [215, 840, 1366, 2111]
print("pouvoirs d'achat respectifs ", u)
print("proportions de contribution respectives", q(u), end="\n\n")
print("-> Dans notre cas, la première colonne est ce que paie A, et la seconde ce que paie B")
r = repartition(contributions, u)
print(r)
print("A paiera donc", ' + '.join(map(str, r[:, 0])))
print("Alors que B paiera", ' + '.join(map(str, r[:, 1])))
Vous devez être membre accéder à ce service...
Pas encore inscrit ?
1 compte par personne, multi-compte interdit !
Ou identifiez-vous :