Je ne suis pas mathématicien, je suis un spécialiste des finances et je suis confronté à un problème qu'il vaut mieux décrire comme suit: Je cherche des conseils sur la façon de classer deux séries d'entiers, dont l'une a un domaine à la fois en valeurs positives et négatives et l'autre n'a qu'un domaine positif.
Des valeurs positives élevées de X sont souhaitées, des valeurs négatives élevées sont indésirables.
Y est limité à des valeurs positives, des valeurs élevées ne sont pas souhaitées, des valeurs faibles sont souhaitées.
Ma meilleure estimation à ce jour a été:
Dans le domaine positif ce rapport a du sens: X / Y
Dans le domaine négatif (1 / X * Y) a tendance à avoir du sens, mais je soupçonne qu'il impose une asymétrie.
Supposons c'est la série triée idéale de X et Y
X, Y, rank 10,100, 6 10,1000, 5.5 1,100, 5.5 1,1000, 4 -1,100, 3 -1,1000, 2.5 -10,100, 2.5 -10,1000, 1
5.5 et 2.5 sont numériquement et conceptuellement similaires (indifférence).
Y a-t-il une fonction que vous pourriez penser à utiliser pour classer et capturer cette logique?
Une limite dure est que X positif est toujours meilleur que X négatif, donc des valeurs négatives de X ne doit jamais être classé au-dessus des valeurs positives de X.
3 Réponses :
Votre hypothèse d'utilisation de X / Y (si Y accepte 0, assurez-vous d'utiliser X / 1 + Y) est correcte. Maintenant, la question est de savoir quelle importance accordez-vous à X et Y? et b .
puisque l'importance de X augmente à mesure que sa valeur augmente, u peut même utiliser x ^ 3 et punir des termes négatifs plus élevés et récompenser des termes positifs plus élevés.
En arrivant à y, 1 / (1 + y ^ 2) si (y accepte 0, 1/0 n'est pas défini alors ajoutez-y 1.)
Si vous connaissez la valeur minimale de votre série X, alors le mieux est probablement d'utiliser le score suivant:
X = (X + Xmin) / Xmax Y = (Y + Ymin) / Ymax
Si vous voulez aller plus loin, vous pouvez même normaliser à la fois X et Y en exécutant:
(X + Xmin)/Y # Adding the minimal value as an offset is a standard procedure to obtain only positive values.
puis exécutez score = X / Y
J'ai utilisé la série .rank () comme ci-dessous:
df['new_rank']=df.X.rank(method='dense',ascending=True)+df.Y.rank(method='dense',ascending=False)-1
print(df)
X Y rank new_rank
0 10 100 6.0 5.0
1 10 1000 5.5 4.0
2 1 100 5.5 4.0
3 1 1000 4.0 3.0
4 -1 100 3.0 3.0
5 -1 1000 2.5 2.0
6 -10 100 2.5 2.0
7 -10 1000 1.0 1.0
Explication dans la documentation dans le lien fourni.
Avec cette solution, les valeurs négatives de X peuvent être étroitement classées aux valeurs positives de X, en fonction de Y. Ce n'est pas conceptuellement ce que je recherche: le X positif domine le X négatif, indépendamment de Y. Des indices?
@Willem pourquoi ne pas simplement aller avec X pour le classement alors? df.X.rank (method = 'dense', ascending = True) ??
Alors votre classement attendu pour
10 100le moins bien classé ou le mieux classé en termes de valeur? 1 étant le moins (IMO)10 100 est le choix dominant, la meilleure de toutes les alternatives (rang le plus élevé).
Oui, je voulais dire le plus élevé étant le rang le plus bas en termes de nombres? sinon ma réponse devrait suffire. :)