Algorithme Pour Le Classement Des Articles
J'ai une liste de 6500 articles que je voudrais commerce ou d'investir dans. (Pas pour de l'argent réel, mais pour un certain jeu.) Chaque élément a 5 numéros qui seront utilisés pour classer parmi les autres.
Quantité totale de l'élément échangés par jour: plus ce chiffre est élevé, mieux c'est.
Le Canal de Donchian de l'élément au cours de la dernière 5 jours: plus ce chiffre est élevé, mieux c'est.
La médiane de la propagation de la prix: La baisse de ce nombre, le meilleur.
La propagation de l'20 jours moyenne mobile de l'élément: La baisse de ce nombre, le meilleur.
La propagation de l'5 jours moyenne mobile de l'élément: plus ce chiffre est élevé, mieux c'est.
Tous les 5 nombres ont le même "poids", ou en d'autres termes, ils devraient avoir une incidence sur le nombre final de la avec la même valeur ou de valeur.
Pour le moment, je viens de multiplier tous les 5 numéros pour chaque élément, mais il n'est pas de classer les éléments de la façon dont je voudrais pour être classé. Je veux juste de combiner tous les 5 chiffres dans un nombre moyen pondéré que je peux utiliser pour classer tous 6500 articles, mais je ne suis pas sûr de la façon de le faire correctement, ou mathématiquement.
Remarque: La quantité totale de l'élément échangés par jour et le canal de donchian sont des nombres qui sont beaucoup plus élevées que les écarts de taux, qui sont plus de pourcentage de ce type de numéros. C'est probablement la raison pour laquelle les multipliant tous ensemble ne fonctionne pas pour moi; la quantité échangée par jour et le canal de donchian avait un rôle beaucoup plus grand dans le dernier numéro.
pouvez-vous ajouter un exemple concret? en général, vous voulez normaliser les numéros de vos données d'entrée les données, puis tout simplement les ajouter ensemble devrait produire un solide classement.
Par exemple, la quantité échangée par jour est de 400. Canal de Donchian est 30000. La médiane de la propagation est .30. La propagation de l'20 jours moyenne est .85, et la propagation de la 5 journée moyenne est de 1,2. L'ajout de l'ensemble soulève le même problème que de les multiplier.
Dans le cas où vous voulez faire quelque chose au sujet de l'apprentissage de la machine (comme templatetypedef suspects), je peux vous donner quelques liens et des recommandations; cependant, je vais m'épargner les ennuis si vous ne le faites pas. Veuillez préciser.
c'est que "certains jeu" EVE online, peut-être? 🙂
OriginalL'auteur Krzysztof Czelusniak | 2011-01-05
Vous devez vous connecter pour publier un commentaire.
La raison pour laquelle les gens ayant des difficultés à répondre à cette question est que nous n'avons aucun moyen de comparaison de deux différents "attributs". S'il y avait seulement deux attributs, dire la quantité échangée et la médiane de l'écart de prix, serait (s'élevant à 20 millions,50%) pire ou meilleure que (100,1%)? Vous seul pouvez décider ce.
La conversion de tout dans la même taille numéros pourrait aider, c'est ce qui est connu comme une "normalisation". Une bonne façon de le faire est le z-score qui Prasad mentionne. C'est un concept statistique, en regardant la façon dont la quantité varie en fonction. Vous avez besoin de faire des hypothèses sur les distributions statistiques de vos numéros à utiliser.
Des choses comme les écarts sont probablement normalement distribué en forme comme une distribution normale. Pour ces derniers, comme Prasad dit, prenez
z(spread) = (spread-mean(spreads))/standardDeviation(spreads)
.Des choses comme le volume des échanges pourrait être un La loi de puissance de la distribution. Pour ces vous voudrez peut-être prendre le
log()
avant de calculer la moyenne et l'écart-type. C'est le z score estz(qty) = (log(qty)-mean(log(quantities)))/sd(log(quantities))
.Puis il suffit d'ajouter le z-score pour chaque attribut.
Pour ce faire, pour chaque attribut, vous devez avoir une idée de sa distribution. Vous pouvez deviner, mais la meilleure façon est de tracer un graphique et un coup d'oeil. Vous pouvez également tracer des graphiques sur journal des échelles. Voir wikipédia pour une longue liste.
Hmm. Donc, je dois tracer le graphique des données pour l'ensemble des 5 catégories, puis de comparer les graphiques de la liste des distributions sur wikipédia? Je ne suis pas sûr de la façon de graphique. Je me permet de mettre les données sur l'axe des y, dois-je donc mettre le point spécifique sur l'axe des x? Si je fais ce que je devine que je devrais trier les éléments sur l'axe des x par la valeur correspondante de l'attribut de bas en haut?
Vous devez créer un histogramme (similaire à un graphique à barres). La façon la plus simple de le faire est avec excel (ou open office, l'équivalent). Voir ncsu.edu/labwrite/res/gt/gt-bar-home.html#ith
OriginalL'auteur Nick Fortescue
Vous pouvez remplacer chaque attribut-vecteur
x
(de longueurN = 6500
) par le z-score du vecteurZ(x)
, oùCe serait de les transformer en de la même "échelle", puis vous pouvez ajouter jusqu'les Z-scores (avec le même poids) pour obtenir un résultat final, et le rang de la
N=6500
éléments par cette note totale. Si vous pouvez trouver dans votre problème, certains autres attributs vecteur qui serait un indicateur de la "bonté" (disons les 10 jours du retour de la sécurité?), ensuite, vous pouvez ajuster un modèle de régression de cet attribut prévu à l'encontre de ces z-ont obtenu des résultats variables, afin de trouver la meilleure non-uniforme du poids.OriginalL'auteur Prasad Chalasani
Début de chaque élément avec un score de 0. Pour chacun des 5 numéros, le tri de la liste par le nombre et ajouter chaque élément de rang dans le tri de son score. Ensuite, il suffit de trier les éléments par la note combinée.
C'est ce que j'avais l'intention de le faire. Toutefois, l'éventail des données varie considérablement. Par exemple, le volume des échanges peut aller de 2 à 40de dollars. Le 40de dollars est beaucoup plus le résultat suivant, qui est d'environ 20millionm qui est également significativement supérieur à l'élément suivant. Classement par ordre négocié par jour ne donne que le point avec 40de dollars un classement sur l'élément avec s'élevant à 20 millions, même si il y a une différence beaucoup plus importante d'environ s'élevant à 20 millions. C'est ce que je vais faire si je ne trouve pas une meilleure solution.
Si vous avez besoin de normalisation, après tout.
OriginalL'auteur Null Set
Vous aurait généralement normaliser vos données entrées à leur portée. Depuis il n'y a pas de limite fixée pour eux, vous aurez à utiliser une gamme de déplacement - ou, pour simplifier, de les normaliser pour le quotidien des plages.
Pour chaque jour, obtenir toutes les entrées pour un type donné, d'obtenir le plus haut et le plus bas d'entre eux, déterminer la différence entre eux. Permettez-Bas=valeur de la plus faible, la Gamme=différence entre le plus haut et le plus bas. Puis on calcule pour chaque entrée (valeur - Bas)/de Gamme, ce qui se traduira par quelque chose entre 0.0 et 1.0. Ce sont les numéros que vous pouvez continuer à travailler avec, alors.
Pseudo-code (entre parenthèses remplacé par indentation pour le rendre plus facile à lire):
quelque chose comme ça. Je vais être plus élégant avec une bonne library (STL, boost, ce que vous avez sur la mise en œuvre de la plateforme), et la normalisation devrait être dans une fonction distincte, de sorte que vous pouvez le remplacer avec d'autres variantes comme log() en tant que de besoin.
OK, adapté à l'affichage. Par plage fixe je voulais dire une gamme de plus de toutes les valeurs dont ils n'ont jamais dépasser. - C'est pourquoi j'ai écrit au sujet de la normalisation. Le linéaire de normalisation ici va aider à lutter contre les différences entre les cinq entrées. Vous pouvez améliorer cette situation en utilisant quelque chose comme logarithmique de mise à l'échelle sur certains articles, si leurs données sont comme ça (répartis sur les magnitudes). Ne pouvez pas savoir ce que vous avez écrit, cependant.
Je suis d'accord avec @foo que faire un journal ou autre mise à l'échelle permettrait de
OriginalL'auteur foo
Quantité totale de l'élément échangés par jour: plus ce nombre est grand, mieux c'est. (a)
Le Canal de Donchian le point sur les 5 derniers jours: plus ce nombre est grand, mieux c'est. (b)
La médiane de la propagation de la le prix: plus ce nombre est grand, mieux c'est. (c)
La propagation de l'20 jours moyenne mobile de l'élément: plus ce nombre est grand, mieux c'est. (d)
La propagation de l'5 jours moyenne mobile de l'élément: plus ce nombre est grand, mieux c'est. (e)
a + b -c -d + e = "score" (plus le score = meilleur score)
OriginalL'auteur sigman1