[PHP] Position formule

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Al enige tijd zit ik te brainstormen omtrent een klassements overzicht.

Ik ben een site aan het maken waarop beoordeeld kan worden. Punten die gegeven worden liggen tussen de 1 en 4.

Het punt ligt echter dat als een product 1 stem heeft gehad met een cijfer 4, of een ander product 100 stemmen heeft en gemiddeld een 3.8 heeft gehaald, zou theoretisch de 4 boven aan staan. Dit is echter niet eerlijk.

Ik ben dus opzoek naar een oplossing die eerlijk berekend wat nou het klassement moet zijn.

Alles heb ik geprogrammeerd in PHP, de database is MySQL

Ik gebruik 2 tabellen voor de producten en stemmen

- tabel product waar alle informatie opgeslagen omtrent het product (hoogte, breedte, id, enz...)
- tabel vote waar alle de punten worden bijgehouden (punt, email, verwijzing naar product id, enz..)

het is een lastige formule. Deze wordt natuurlijk nooit 100 % betrouwbaar, maar het moet wel in de buurt kunnen komen.

Acties:
  • 0 Henk 'm!

  • posttoast
  • Registratie: April 2000
  • Laatst online: 16:20
Misschien denk ik te simpel hoor, maar is het niet gewoon een kwestie van de punten bij elkaar optellen en vervolgens delen door het aantal stemmen?

Ik denk te simpel, laat maar! ;)

[ Voor 12% gewijzigd door posttoast op 10-05-2007 11:02 ]

omniscale.nl


Acties:
  • 0 Henk 'm!

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Wat voor formules/trucs heb je zelf bedacht? Er zijn een aantal eenvoudige ideeen waarvan je in je startpost had mogen aangeven waarom je het niet zo op wil lossen. Bijvoorbeeld pas een item in een top lijstje weergeven als er >= X stemmen op dat item zijn.

Een ander idee is het niet meetellen van de hoogste en laagste stem. op die manier moet je minimaal 3 stemmen hebben, plus dat je uitschieters anders behandeld.

Etc. etc.

{signature}


Acties:
  • 0 Henk 'm!

  • wackmaniac
  • Registratie: Februari 2004
  • Laatst online: 19-09 18:02
Zou je niet per stem, ongeacht de waardering, een minuscule telling bij het gemiddelde kunnen doen?

Het lijkt misschien niet eerlijk, maar het is wel een gemiddelde. Wat je ook zou kunnen doen is het gemiddelde pas weergegeven als er een minimum aantal stemmen is geweest, bijvoorbeeld 10 ofzo.

[ Voor 9% gewijzigd door wackmaniac op 10-05-2007 11:06 . Reden: Voutloos typt sneller :) ]

Read the code, write the code, be the code!


Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 02:21

Janoz

Moderator Devschuur®

!litemod

php en mysql hebben helemaal niks met je probleem te maken op dit moment. Het is nu van belang dat je regels gaat verzinnen die jij eerlijker vindt dan simpel het gemiddelde van alle stemmen nemen. Dit vervolgens in php of mysql programmeren is iets wat je pas daarna zou moeten gaan doen.

Wanneer vind jij het wel eerlijk? Je zou bijvoorbeeld kunnen beargumenteren dat er pas bij 10 stemmen een eerlijk beeld is en alles dat nog geen 10 stemmen heeft niet opnemen in de ranking.

Een andere mogelijkheid zou kunnen zijn dat je bij alle items standaard een x aantal 'gemiddelde' stemmen meetelt. 1 stem heeft dan gelijk aan het begin al wat minder invloed terwijl een heleboel stemmen er voor zorgen dat die x 'standaard' stemmen nauwlijks meer meetellen.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
tnkx,

het is misschien wel het eerlijks als ieder product een x aantal stemmen heeft. Stel dat er 10 stemmen zijn, dat dan het totaal aantal punten gedeeld wordt door 10

bv.

punten / aantal stemmen = cijfer:

30 / 10 = 3
50 / 10 = 5
50 / 15 = 3,3

enzo....

zo ga ik het aanpakken! bedankt allemaal!

Acties:
  • 0 Henk 'm!

  • Deikke
  • Registratie: Juni 2004
  • Laatst online: 06:44
Dat is toch het gemiddelde uitrekenen? of vergeet ik nu iets. Ik zou juist bij het aantal stemmen eentje optellen, hierdoor krijgen weinig stemmen minder invloed:

Immers: 6/3 (2 stemmen van 3) = 2
9/4 (3 stemmen van 3) = 2,25

Zo krijg je wel een netjeze ranking. Dit is bijna zoiets als Janoz ook bedoelt.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
idd, is gewoon het gemiddelde en is eigenlijk niet helemaal eerlijk.

is ga een soort van factor inbouwen. bv

1 - 10 stemmen * 0,6
11 - 30 stemmen * 0,7
31 - 50 stemmen * 0,8
51 - 100 stemmen * 0,9
> 100 stemmen * 1,0

Het voordeel hiervan is dat er ook bij 2 stemmen een waarde is. Hoe meer stemmen, hoe hoger de waardering.

Hierdoor zal er ook minder vaak een zelfde waarde uitkomen.

Acties:
  • 0 Henk 'm!

Verwijderd

Een ander belangrijk gegeven is de gemiddelde afwijking.
20 stemmen op 1 en 20 stemmen op 3 geeft een gemiddelde van 2.
40 stemmen op 2 geeft uiteraard ook een gemiddelde van 2.

De laatste is uiteraard het meest relevant. De afwijking is daar namelijk 0 en dat terwijl in het eerste voorbeeld de afwijking 1 is. Feitelijk komt het dus neer op boxplot geneuzel.

[ Voor 27% gewijzigd door Verwijderd op 10-05-2007 12:46 . Reden: verkeerd citaat verwijderd ]


Acties:
  • 0 Henk 'm!

  • T-MOB
  • Registratie: Maart 2001
  • Nu online
In plaats van harde grenzen voor de hoeveelheid stemmen kun je ook een formule bedenken waarin het aantal stemmen meeweegt. Voor de IMDb top 250 wordt bijvoorbeeld de volgende weging gebruikt:
weighted rating (WR) = (v ÷ (v+m)) × R + (m ÷ (v+m)) × C

where:
R = average for the movie (mean) = (Rating)
v = number of votes for the movie = (votes)
m = minimum votes required to be listed in the Top 250 (currently 1300)
C = the mean vote across the whole report (currently 6.7)

Regeren is vooruitschuiven

Pagina: 1