Berekenen welk email adres op basis van percentage.

Pagina: 1
Acties:

Onderwerpen

Vraag


Acties:
  • 0 Henk 'm!

  • EricBruggema
  • Registratie: Maart 2007
  • Laatst online: 23-08 11:22
Beste allemaal,

Voor een project heb ik iets bedacht maar heb al uren geen idee hoe ik dit moet gaan aanpakken.

Een formulier wordt gebruikt om een groep mensen te emailen, echter wil ik dat niet ieder persoon deze gegevens ontvangt maar 1 van het aantal mensen. Per 'email' adres wil ik een percentage aangeven, dit precentage kan gebruikt worden om te berekenen hoeveel en wanneer er een formulier verzonden moet worden naar welk persoon.

Bv
25%, email1@gebruikers.nl
25%, email2@gebruikers.nl
50%, email3@gebruikers.nl

of

10%, email@gebruikers.nl
15%, email1@gebruikers.nl
25%, email2@gebruikers.nl
50%, email3@gebruikers.nl

of wat voor opzet dan ook maar. Nu kan ik een 'counter' bijhouden, met deze counter zou ik moeten kunnen achterhalen naar welke ontvanger deze email verzonden moet worden. Alleen heb ik geen idee hoe ik dit moet aanpakken. Iemand een idee?

Beste antwoord (via EricBruggema op 04-08-2016 21:40)


  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Kijk eens naar dit algoritme. In een notedop:
  1. Pick a random number less than the total
  2. At each position of the array, subtract the weight at that position
  3. When the result is negative, return that position
Ik zou niet eens percentages gebruiken (hoewel dat kan), maar elk e-mail adres een 'weight' toekennen. Als je dan wil bepalen wie je wil mailen (meer weight = meer kans op mail) tel je de weights op, pik je een willekeurig getal tussen 0 en total_weight, vervolgens ga je 1-voor-1 de weight van elk van die adressen van het dat getal afhalen totdat je op een negatief getal komt -> dat is degene die deze keer de mail krijgt.

Je kunt dan je weights configureren zodat ze 'toevallig' op 100% uitkomen:

email1@gebruikers.nl 25
email2@gebruikers.nl 25
email3@gebruikers.nl 50

Maar dat komt dan overeen met:

email1@gebruikers.nl 1
email2@gebruikers.nl 1
email3@gebruikers.nl 2

(Voor je 2e voorbeeld (10%, 15%, 25%, 50%) zou je dan 2, 3, 5, 10 als weights kunnen gebruiken).

Dan hoef je bij mutaties op die mailadressen niet steeds moeilijk te doen met precies op 100 uitkomen ofzo. Een 4e entry bijmaken is dan niets anders dan:

email4@gebruikers.nl 2

toevoegen. Vervolgens hebben 1&2 ieder 16,6%, en 3 en 4 ieder 33,3% kans (want totale weight = 6, 1&2 beide 1/6e kans, 3&4 beide 2/6e (1/3e) kans).

Wel moet je er voor zorgen dat de sortering van die lijst altijd hetzelfde is (e.g. ...order by email of ...order by id o.i.d. als je de lijst uit je DB haalt); als de lijst elke run anders is komen, over meerdere runs gezien, natuurlijk anders de emails nog niet echt 'weighted' uit bij de ontvangers.

(Overigens is dit een redelijk gangbaar concept, loadbalancers (in principe 'load balance' jij e-mails) gebruiken het en bij SRV records is dit ook gebruikelijk)

Voordeel is dat je "stateless" kunt werken (ofwel: geen noodzaak voor tellers e.d.; gemiddeld genomen zullen de ontvangers op basis van hun weight ("kans") hun aantal mails krijgen) aangenomen dat je RNG een fatsoenlijke distributie heeft.

[ Voor 131% gewijzigd door RobIII op 03-08-2016 21:39 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij

Alle reacties


Acties:
  • 0 Henk 'm!

  • johnkeates
  • Registratie: Februari 2008
  • Laatst online: 04-07 16:30
Een formulier wordt gebruikt om een groep mensen te emailen, echter wil ik dat niet ieder persoon deze gegevens ontvangt maar 1 van het aantal mensen.
eh? Het formulier versturen naar iemand? Het mail adres laten zien aan de afzender? Wat moet er nu precies gebeuren...

Verder: ik zou gewoon round-robin het lijstje afwerken.

Acties:
  • 0 Henk 'm!

  • EricBruggema
  • Registratie: Maart 2007
  • Laatst online: 23-08 11:22
Hoi John, het formulier wordt ingevuld door gebruikers van een website, deze gegevens (verzonden data van het formulier) worden dus op basis van de counter naar een email adres uit een lijst gestuurd, in deze lijst staan email adressen met percentages en wanneer de counter op een van de percentages slaat moeten deze gegevens dus gebruikt worden om de data/mail te versturen. De invuller van de lijst ziet niets meer dan dat deze gegevens verzonden zijn.

[ Voor 10% gewijzigd door EricBruggema op 03-08-2016 14:10 ]


Acties:
  • Beste antwoord
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Kijk eens naar dit algoritme. In een notedop:
  1. Pick a random number less than the total
  2. At each position of the array, subtract the weight at that position
  3. When the result is negative, return that position
Ik zou niet eens percentages gebruiken (hoewel dat kan), maar elk e-mail adres een 'weight' toekennen. Als je dan wil bepalen wie je wil mailen (meer weight = meer kans op mail) tel je de weights op, pik je een willekeurig getal tussen 0 en total_weight, vervolgens ga je 1-voor-1 de weight van elk van die adressen van het dat getal afhalen totdat je op een negatief getal komt -> dat is degene die deze keer de mail krijgt.

Je kunt dan je weights configureren zodat ze 'toevallig' op 100% uitkomen:

email1@gebruikers.nl 25
email2@gebruikers.nl 25
email3@gebruikers.nl 50

Maar dat komt dan overeen met:

email1@gebruikers.nl 1
email2@gebruikers.nl 1
email3@gebruikers.nl 2

(Voor je 2e voorbeeld (10%, 15%, 25%, 50%) zou je dan 2, 3, 5, 10 als weights kunnen gebruiken).

Dan hoef je bij mutaties op die mailadressen niet steeds moeilijk te doen met precies op 100 uitkomen ofzo. Een 4e entry bijmaken is dan niets anders dan:

email4@gebruikers.nl 2

toevoegen. Vervolgens hebben 1&2 ieder 16,6%, en 3 en 4 ieder 33,3% kans (want totale weight = 6, 1&2 beide 1/6e kans, 3&4 beide 2/6e (1/3e) kans).

Wel moet je er voor zorgen dat de sortering van die lijst altijd hetzelfde is (e.g. ...order by email of ...order by id o.i.d. als je de lijst uit je DB haalt); als de lijst elke run anders is komen, over meerdere runs gezien, natuurlijk anders de emails nog niet echt 'weighted' uit bij de ontvangers.

(Overigens is dit een redelijk gangbaar concept, loadbalancers (in principe 'load balance' jij e-mails) gebruiken het en bij SRV records is dit ook gebruikelijk)

Voordeel is dat je "stateless" kunt werken (ofwel: geen noodzaak voor tellers e.d.; gemiddeld genomen zullen de ontvangers op basis van hun weight ("kans") hun aantal mails krijgen) aangenomen dat je RNG een fatsoenlijke distributie heeft.

[ Voor 131% gewijzigd door RobIII op 03-08-2016 21:39 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • Ventieldopje
  • Registratie: December 2005
  • Laatst online: 17-09 10:59

Ventieldopje

I'm not your pal, mate!

Noemen ze dit niet gewoon een A/B test? Mailing list managers als MailChimp (zie: A/B Testing) ondersteunen dit out of the box en het is een bekend concept.

Dit helpt misschien met de zoektocht :)

[ Voor 16% gewijzigd door Ventieldopje op 03-08-2016 17:09 ]

www.maartendeboer.net
1D X | 5Ds | Zeiss Milvus 25, 50, 85 f/1.4 | Zeiss Otus 55 f/1.4 | Canon 200 f/1.8 | Canon 200 f/2 | Canon 300 f/2.8


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Ventieldopje schreef op woensdag 03 augustus 2016 @ 17:08:
Noemen ze dit niet gewoon een A/B test?
Nee? Lees de TS nog eens?
Ventieldopje schreef op woensdag 03 augustus 2016 @ 17:08:
Dit helpt misschien met de zoektocht :)
...of het schept verwarring / zet OP op het verkeerde spoor ;)

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • vickypollard
  • Registratie: Juni 2009
  • Laatst online: 17:33
Ik heb het idee dat je hier iets hebt bedacht om een probleem op te lossen en dat je dat probleem niet aan ons vertelt. Of ik snap gewoon je doel niet echt, waardoor ik me lastig een voorstelling kan maken bij wat je nu eigenlijk echt wilt. Waarom zou bijvoorbeeld niet iedereen de mail mogen ontvangen? Je mailt toch niet naar een groep om uiteindelijk maar 1 persoon te bereiken? En zijn die emailadressen dan al bekend en hebben ze al een percentage/gewicht toegewezen gekregen? Of zijn ze bij ieder ingevuld formulier nieuw en wijs je random percentages toe? Het is mij een beetje onduidelijk :)

Acties:
  • 0 Henk 'm!

  • EricBruggema
  • Registratie: Maart 2007
  • Laatst online: 23-08 11:22
Het stukje van RobIII is duidelijk genoeg voor mij, ik ga er mee aan de slag! :)
Pagina: 1