_대문 | 방명록 | 최근글 | 홈피소개 | 주인놈
FrontPage › 애매한조건의랜덤추출

Contents

[-]
1 질문 내용
2 나의 솔루션
3 참고자료


1 질문 내용 #

데브피아에 재미있는 질문이 올라왔다. [http]질문은 아래와 같다.
C#과 MS-SQL로 문제은행 프로그램을 생각하고 있습니다.
문제출제는 랜덤으로 1문제씩 빈도 조건을 정답률이 낮을수록 으로 하고 싶습니다.

대충 쿼리를 짜봤습니다.
SELECT TOP1 *
FROM TABLE1
WHERE 정답률이 낮을 수록(0%에 가까울 수록)
ORDER BY NEWID();  

문제가 조건절에 ..에 가까울 수록인데 해결할 방법이 있을까요  
문제는 'WHERE 정답률이 낮을 수록(0%에 가까울 수록)' 조건을 어떻게 주느냐가 문제다. 즉, 기준의 애매모호함을 어떻게 해결하는가가 이 문제의 핵심이다.

2 나의 솔루션 #

약간의 통계학적인 부분이 필요하다. 일단 문제1, 문제2, 문제3 .. 여러개가 있을 것이다. 각각의 문제를 몇명이나 맞췄는지 집계한다. 즉, 아래와 같을 것이다.

문제번호맞춘횟수평균표준편차
문제1124......
문제2423......
...........

그리고 평균과 표준편차를 구한다. (정규분포를 따른다고 가정했을 때에..)

  • 1sigma = 평균 - 1 * 표준편차
  • 2sigma = 평균 - 2 * 표준편차
  • 3sigma = 평균 - 3 * 표준편차

구하고자 하는 것은 정답률이 낮은 것이다. 즉, 보통이 아닌 이상치를 구하는 것이다. 보통 이상치는 1.5 ~ 2.0 sigma 정도다. 그러므로

  • WHERE 맞춘횟수 <= 평균 - 2 * 표준편차 --애덜이 잘 못 맞춘 문제들(어려운 문제들)
  • WHERE 맞춘횟수 >= 평균 + 2 * 표준편차 --애덜이 많이 맞춘 문제들(쉬운 문제들)

정도로 해결 할 수 있다. 물론 매번 랜던추출시마다 평균과 표준편차를 구할 필요는 없다. 통계치는 매번 변하는 것이 아니므로 2주, 1개월에 한 번 평균과 표준편차를 집계한 테이블을 만들어 놓으면 된다. 또한 랜덤추출 대상이 되는 문제들을 미리 저장하는 방법도 성능을 위한 괜찮은 방법이다.


댓글 남기기..
이름: : 오른쪽의 새로고침을 클릭해 주세요. 새로고침
EditText : Print : Mobile : FindPage : DeletePage : LikePages : Powered by MoniWiki : Last modified 2018-04-13 23:12:52

마음이 나누어주는 것은 결코 사라지지 않습니다. 그것은 다른 사람들의 가슴 안에 저장됩니다. (로빈 세인트 존)