5'ten fazla seri numaraları 100 işlemler içinde sırayla görünür bir işlem dosyasında bulma etkinlikleri

1 Cevap php

Ben mümkün olduğunca SQL içine görevin kadar iterek gibi yöneticileriniz mümkün oluşturmaya çalışıyorum bir online çekiliş dolandırıcılık algılama açısından alışılmadık bir istemci isteği yaşadım.

Bu durumda, yapı olup:


table: codes

raffle_code | ticket_type | sequence

A00000001     Red            1
A00000002     Red            2
...
A0000000X     Red            X
B00000001     Blue           1

etc

X ticket_types, bu kendi dizisi her olabilir. Çekiliş kodları benzersiz sağlamalarının vardır, ben sadece örneğin basitleştirilmiş ettik.

Şimdi sorun bu kodları rastgele verilen olmasıdır ve onlar sırayla girilen herhangi bir olay (muhtemelen) hileli olduğunu. Kodlarının girilmiş böylece gibi bir işlem dosyasına kaydedilir:

table: transactions

user_id  |  raffle_code | transaction_number | timestamp
1           A00000032      1              etc...

İstenilen kuralı verilen bir tür fazla 5 çekiliş kodları, 100 işlemlerin belirli bir kümesi içinde sırayla girilen eğer şüpheli ve katılan kullanıcıların çekilmiş olması gerektiğidir.

Benim intial düşünce ayrı ayrı her bir dolandırıcılık olayı için sahte kullanıcı işlemleri kepçe sonra, ilk dolandırıcılık olayları algılamak girişimi oldu. Ben düşünüyordum kaba SQL gibi bir şey oldu:


SELECT c.raffle_code, MIN(t.timestamp), MAX(t.timestamp), MIN(t.transaction_number), MAX(t.transaction_number)
FROM codes c, transactions t
WHERE c.raffle_code = t.raffle_code
GROUP BY c.raffle_code
HAVING ( MAX(c.sequence) - MIN(c.sequence) ) = ( COUNT(*) -1 )
AND    ( MAX(t.transaction_number) - MIN(t.transaction_number) )  4;

(Bell üzerinde sayesinde this question fikrini kıvılcım için)

Bu kullanıcı kimlikleri için yeniden sorgu için işlem dosyasında yer (transaction_number aralık ve zaman damgası aralık) verecek. Bu dolandırıcılık ilan edilecek bir şüpheli olay eyes-on doğrulama gerektirir, ama şu anda sistemin kabul edilen bir uyarıdır.

Dizisi ile "kırmızı" bilet "3,4,5,6,7,48" it aralığı olarak tespit değil, belirli bir 100 işlemlerde meydana 45 ise yukarıdaki SQL ile sorun çok daha büyük olan, bir 6 saymak ve bu nedenle biletleri rastgele girilen olsaydı beklenen bir oluşumu gibi.

Işlem dosyası oldukça büyük olması ve sık hit olması mukadder, bu yüzden bunun üzerinden almak ve işlem oluşturmak için sunucu kodu kullanarak bir anda o 100 işlemlerin dredging analiz etmek çok inefficent olacaktı yığınlarının edilir.

Herkes önce böyle bir şey karşılaştı? Müşteri hala çok kısa bir metin Kısaca dışında kendi gereksinimleri ile oldukça belirsiz olmuştur, bu yüzden ben de sıralı girişini tespit için alternatif kavramları eğlenceli ediyorum.

1 Cevap

Ben senin soru almak izlenim set söylüyorsun "3,4,5,6,7,48", belirtilen kriterlere uymayan gibi hileli sayılmaz ama hissediyorum o kadar saymak gerekir biraz şüpheli hissediyor.

Olası bir hileli işlem kümesini tespit Sorun kesinlikle zor - bizi ayarlanmış bir işlem bilgisayar takip etmek için açık kurallar tanımlamak mümkün olmadan hileli olduğunu hissetmek için çok kolay.

Neden sadece hileli olarak sayar bir dizi sıralı uzunluğunu düşürmez?

Sizin sezgi bu çok fazla yanlış pozitif kusmak olacağını olabilir. Bunu yedeklemek için veri var sürece görmezden!

Bu düşünün:

  • non-cheating user iki sıralı çekiliş kodları gibi birkaç giren bir olasılığı nedir? Bu olasılık X diyoruz
  • cheating user iki sıralı çekiliş kodları olduğunca az giren bir olasılığı nedir? Bu olasılık Y. Çağrı

X >> Y ise, iki veya daha fazla sıralı çekiliş kodları herhangi bir set hileli olma olasılığı yüksek olan.

(100 işlemlerin bir dizi içinde) aynı kullanıcı iki veya daha fazla ardışık çekiliş kodlarını içeren olarak ayarlanmış bir hileli işlem tanımlayarak başlayan sahipsiniz. Bu aslında ne sıklıkta olur bakın.

Eğer çok fazla yanlış pozitif olsun bulursanız, 3 asgari sıralı dizisi uzunluğunu artırmak. Gerektiği gibi tekrarlayın.

Ben değil mi işlemlerin potansiyel olarak hileli setlerinin belirlenmesi konusunda aşırı temkinli davranıyorsun hissediyorum. Bu konuda çok zor düşünmemeye çalışın.

Bu% 100 doğru olacak asla ve sen başlamak için% 100 sağa yakın olmak için gitmiyoruz bu yüzden hassas daha olasılık ile yapmak daha vardır. Bazı eğitim ve aslında ne test ve muayene iyi bir yaklaşımdır.