K=1이 나와야 된다는 전제가 잘못 됐다는 글들을 보고 이해가 안돼서 그냥 프로그램을 짜서 돌려봤다.
가설 - 빨간공 파랑공을 3%짜리 구멍이 있는곳을 통과 시킬경우 처럼 분류된 후의 데이터를 가지고
(3% 통과한 공들의 비율)/(97% 통과한 공들의 비율) 과 같이 했음
선거구 300곳 선거구당 10만명 총 3천만명
실제 투표 1번 51%, 2번 48%, 무효표 1%
분류기 정확도 97%
결과 - 선거구별 K값 분포
(꼬릿말의 소스를 matlab 2015a을 실행시키고 바로 수행하면 정확한 수치까지 재현 가능. rand함수의 비밀~)
K=1 근처로 나왔다.
근데 이건 정확도의 정의가 미분류표/ 총표수 이다.
정확도는 각 표를 정확히 분류한 표수/ 총표수이다.
나머지는 2번에 투표했는데 1번에 들어가서 1번에 카운트 된 것도 있고 미분류로 들어간 것도 있다.
어째든 이걸로 좀 더 복잡하게 시뮬 (일이 커졌다 ㅡㅡㅋ)
그래봐야 1근처로 분포했다.
근데 프로그램 짜 놓고 깨닳은 건데 미분류표 3.6%는 지나치게 높다.
분류 정확도가 95%로 설정했을 때 미분류표 수치가 3.5%가 나왔다.
분류 정확도 99.5%면 미분류표가 저렇게 많이 나오는게 이상하다.
스팩을 뻥튀기 했던가
에매한건 일단 미분류로 보내기 때문인데
유독 1번이 애매한게 많더라~ 라는 결론입니다.
추가 : 일단 표본이 랜덤해야 1이 나오는건 맞구요
표본이 유독 한쪽으로 쏠린건 원인 파악을 해봐야 합니다.
PS. 합리적인 지적 환영합니다.
첫번째
clear all
%park=1; moon=2; etc=3;
voter=100000; constituency=300;  
vote=rand(voter, constituency);
vote(vote<0.51)=1;  % 51%
vote(vote<0.99)=2;  % 48%
vote(vote<1.00)=3;  % 1%
% 
% The plan에서 설명한 k=1이 나와야 하는 이유
shunt=rand(voter, constituency);
accuracy=0.97;
pass=zeros(voter, constituency);
fail=zeros(voter, constituency);
pass(shunt<=accuracy)=vote(shunt<=accuracy);
fail(shunt>accuracy)=vote(shunt>accuracy);
for i=1:1:constituency
    k(i)=(sum(fail(:,i)==1)/sum(fail(:,i)==2))/(sum(pass(:,i)==1)/sum(pass(:,i)==2));
    unclassified(i)=sum(pass(:,i)==3)+sum(fail(:,i)==1)+sum(fail(:,i)==2)+sum(fail(:,i)==3);
end
mean_unclassified=mean(unclassified)/voter*100;
mean_k=mean(k);
histogram(k)
2번째
clear all
%park=1; moon=2; etc=3;
voter=100000; constituency=300;  
vote=rand(voter, constituency);
vote(vote<0.51)=1;  % 51%
vote(vote<0.99)=2;  % 48%
vote(vote<1.00)=3;  % 1%
% 분류기 정확도에 따른 상황
pass=zeros(voter, constituency);
fail=zeros(voter, constituency);
out=zeros(voter, constituency);
accuracy=0.95;
for c=1:1:constituency
    for v=1:1:voter
        if rand<accuracy
            pass(v,c)=vote(v,c);    % 잘 분류된것
        else
            switch vote(v,c);
                case 1              % 잘못 분류된 1번표가
                    if rand>0.5
                        fail(v,c)=2;% 2번에 섞여들어가거나
                    else
                        out(v,c)=1; % 미분류로 나오거나
                    end
                case 2
                    if rand>0.5
                        fail(v,c)=1;% 1번에 섞여들어가거나
                    else
                        out(v,c)=2; % 미분류로 나오거나
                    end
                case 3
                    if rand>0.5
                        fail(v,c)=1;% 1번에 섞여들어가거나
                    else
                        fail(v,c)=2;% 2번에 섞여들어가거나
                    end
            end
        end
    end
end
classified=pass+fail;
for i=1:1:constituency
    k(i)=(sum(out(:,i)==1)/sum(out(:,i)==2))/(sum(classified(:,i)==1)/sum(classified(:,i)==2));
    unclassified(i)=sum(classified(:,i)==3)+sum(out(:,i)==1)+sum(out(:,i)==2)+sum(out(:,i)==3);
end
mean_unclassified=mean(unclassified)/voter*100;
mean_k=mean(k);
histogram(k)
no1=sum(sum(classified==1)+sum(out==1))/(voter*constituency)*100;
no2=sum(sum(classified==2)+sum(out==2))/(voter*constituency)*100;