2009-07-02 3 views
1

나는 가능한 한 효율적으로 구축하려는 온라인 추첨식에서 사기 탐지와 관련하여 비정상적인 클라이언트 요청을 받았습니다. 가능한 많은 작업을 SQL로 밀어 넣습니다. 100 개 거래 내에서 순차적으로 5 개 이상의 일련 번호가 나타나는 트랜잭션 파일에서 이벤트 찾기

구조

따라서이다 :

 

table: codes 

raffle_code | ticket_type | sequence 

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

etc 

X ticket_types가있을 수 있습니다, 그것은 자신의 순서와 각. 래플 코드는 고유 한 해시입니다. 예제를 위해 단순화했습니다.

이제는 이러한 코드가 임의로 발급되고 연속적으로 입력되는 이벤트는 (아마도) 사기성이있는 것이 문제입니다. 코드의 enteries은과 같이 트랜잭션 파일에 기록된다

 
table: transactions 

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

원하는 규칙은 그 특정 형태의 5 개 이상의 추첨 번호는 100 트랜잭션 주어진 세트 내에서 순차적으로 입력되는 경우 용의자이며 관련된 사용자가 당겨 져야합니다.

처음에는 사기 사건을 감지하고 각 사기 사건에 대한 사기성 사용자 트랜잭션을 별도로 스쿠 핑하려고했습니다. 내가 생각하고 있었는데 거친 SQL이었다 같은 : 이것은 트랜잭션 파일에 장소 (transaction_number 범위와 타임 스탬프 범위)를 줄 것이다

(아이디어를 촉발하기위한 this question에 이상 벨 덕분에)

 

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; 

사용자 ID를 다시 쿼리 할 수 ​​있습니다. 용의자 사건에 대한 사기 진입을 사기로 선언해야하지만, 현재로서는 시스템의 승인 된 경고입니다.

위의 SQL 문제는 주어진 "10000 트랜잭션에서"3,4,5,6,7,48 "시퀀스의"red "티켓이 발견되면 범위가 45이므로 검색되지 않습니다. 티켓 수가 무작위로 입력되는 경우 예상되는 발생이 될 수 있습니다.

트랜잭션 파일의 크기가 매우 크며 자주 조회가 이루어 지므로 서버 코드를 사용하여 분석하고 트랜잭션 스택을 빌드하여 한 번에 100 개의 트랜잭션을 준설하면 매우 비효율적입니다.

누구나 전에 이와 같은 것이 발견 되었습니까? 고객은 매우 짧은 텍스트 요약 외에도 요구 사항이 매우 모호했습니다. 따라서 순차 입력을 감지하는 대체 개념을 접하게됩니다.

+0

"상당히 큰"크기는 어느 정도입니까? 특정 티켓 유형의 행 수는 몇 개입니까? – Craig

+0

처음에는 수십만 개를 추측하고 있지만 응답에 따라 확장 될 수 있습니다. –

답변

1

귀하의 질문에서 얻은 인상은 귀하가 "3,4,5,6,7,48"세트가 지정된 기준을 충족시키지 못했지만 귀하가 느끼는 세트가 "사기"로 간주된다는 것입니다. 그것은 약간 의심되는 것으로 간주되어야합니다.

가능한 사기 거래 집합을 감지하는 문제는 분명히 까다 롭습니다. 컴퓨터가 따라야 할 명확한 규칙을 정의 할 수 없으면 트랜잭션 집합이 사기성이라고 느낄 수 있습니다.

사기성으로 간주되는 순차 세트의 길이를 단순히 낮추지 않는 이유는 무엇입니까?

당신의 직관력은 너무 많은 위양성을 던질 수도 있다는 것입니다. 백업 할 데이터가 없다면 무시하십시오!

이를 고려

  • 이 개 순차적 추첨 코드로 몇 들어가는 아닌 부정 사용자의 확률은 무엇입니까

    ? 이 확률 X를 호출하십시오.
  • 부정 사용자에 2 개의 순차 추첨 코드가 입력 될 가능성은 얼마나됩니까? 이 확률 Y를 호출하십시오.

X >> Y이면 둘 이상의 순차 추첨 코드 세트가 사기성이 높은 것입니다.

동일한 사용자 (두 세트 이상의 100 개 트랜잭션 내)에서 두 개 이상의 순차적 래플 코드가 포함 된 것으로 사기 거래 세트를 정의하여 시작하십시오. 이것이 실제로 얼마나 자주 발생하는지보십시오.

가양 성 (false positive)이 너무 많으면 최소 순차 시퀀스 길이를 3으로 늘리십시오. 필요에 따라 반복하십시오.

나는 잠재적으로 사기성이있는 거래의 사기성을 확인하는 것에 지나치게 조심 스럽습니다. 이것에 대해 너무 열심히 생각하지 않도록 노력하십시오.

이것은 정확도보다 확률과 관련이 있으므로 결코 100 % 맞지는 않을 것이며 100 %에 근접하지 않을 것입니다. 실제로 어떤 일이 발생했는지에 대한 몇 가지 교육 및 테스트와 검사가 더 나은 접근 방법입니다.

+0

오탐을 수집하는 것이 불가피하다는 것에 동의합니다. 합법적 인 사용자가 티켓을 하나의 풀에서 실제로 발행하기 때문에 티켓을 구매할 수 있습니다. 첫 번째 요점은 물론 맞습니다. 3,4,5,6,7,48은 사기성이지만 3,4,5,6,7 만 빼고 48을 무시하면 문제를 혼란스럽게 생각합니다. 3, 12, 48은 괜찮으므로 45의 시퀀스 범위가 예상되지만 위와 같지 않습니다. 합법적 일 가능성과 사기성이 좋은 점입니다. 특정 가중치를 넘는 사용자를 강조 표시하는 사용자 가중 시스템을 개발하고 있습니다. –

관련 문제