jump to navigation

Ile Niemcy zbudowali czołgów czyli o estymacji rozmiaru populacji 08/16/2010

Posted by Mikołaj Morzy in eksploracja danych, nauka.
trackback

German tank Tiger burning W trakcie wojny ważnym zadaniem wywiadów była ocena mocy produkcyjnych przeciwników. W szczególności, Anglicy próbowali za wszelką cenę dowiedzieć się, ile Niemcy produkowali czołgów miesięcznie. Do dyspozycji mieli techniki wywiadowcze, informacje przesyłane przez organizacje podziemne z okupowanych krajów, a także zdjęcia lotnicze i modele niemieckiego przemysłu. Na podstawie takich danych wywiad dokonywał szacunków niemieckiego potencjału przemysłowego. Co ciekawe, szacunki podawane przez angielski wywiad były dramatycznie zawyżone.

Zupełnie niespodziewanie w sukurs aliantom przyszła statystyka. Anglicy posiadali jeszcze rzecz bezcenną: próbki badanej populacji. Populacją był, rzecz jasna, zbiór wszystkich niemieckich czołgów, natomiast próbkę stanowiły wraki zdobyte na polu walki we Francji i Afryce. Wraki te posiadały tabliczki znamionowe, na których wytłoczono numery seryjne. Alianci prawidłowo zakładali, że przywiązani do porządku Niemcy będą numerować produkowane czołgi w sposób spójny i niesprzeczny, w szczególności, że numeracja będzie wzrastała. Aby ocenić maksymalny numer seryjny czołgu na podstawie dostępnej próbki zdobytych wraków posłużono się następującą formułą:

\hat{n} = m + \frac{m}{n} -1, gdzie \hat{n} to estymowany rozmiar populacji, n to rozmiar próbki, a m to maksymalny numer seryjny w próbce.

Wyniki okazały się zdumiewająco dobre. Poniżej zamieściłem porównanie oszacowań i rzeczywistej produkcji czołgów dla dwóch różnych momentów wojny:

miesiąc rzeczywista produkcja przewidywania wywiadu statystyka
czerwiec 1940 122 1000 169
czerwiec 1941 271 1550 244
sierpień 1942 342 1550 327

Z czystej ciekawości postanowiłem sprawdzić, jak ta formuła zadziała dla danych syntetycznych. Wygenerowałem zbiór liczący sobie ponad 474\,000 różnych liczb i losowałem z niego próbki o bardzo niewielkim rozmiarze, próbując znaleźć oryginalny rozmiar populacji na podstawie maksymalnej liczby znajdowanej w każdej próbce. Poniżej zamieszczam wynik tego ćwiczenia:

Zauważcie, że dysponując próbką stanowiącą zaledwie 0.01% (jedną dziesięciotysięczną) rozmiaru oryginalnej populacji szacowany rozmiar tej populacji jest obarczony zaledwie 2% błędem. Jeśli do dyspozycji mamy 0.02% populacji, nie powinniśmy się pomylić o więcej niż 1%. Podejrzewam, że rzeczywiste numery seryjne są generowane w bardziej skomplikowany sposób, a nie posiadam pod ręką niestety żadnego zbioru danych, na którym mógłbym to sprawdzić. W moim przypadku zbiór liczb odpowiadał ciągłej sekwencji rosnących liczb całkowitych. Jeśli ktoś chce/ma czas/ma ochotę, to z przyjemnością upublicznimy wynik podobnego eksperymentu na rzeczywistych danych na tych łamach.

Warto zapamiętać ten trik, bo może okazać się przydatny w wielu niespodziewanych miejscach. Np. do wykradzenia tajemnicy handlowej konkurencji. W 2008 roku posłużono się podobną metodą, aby na podstawie numerów seryjnych iPhone’ów zamieszczanych przez właścicieli na forum internetowym oszacować liczbę telefonów sprzedanych przez Apple’a.

Komentarze»

1. ztrewq - 08/17/2010

Kulerskie, ale skąd ten wzór właściwie? Masz jakieś odnośniki?

2. Mikołaj Morzy - 08/17/2010

Niestety nie, natknąłem się na tę historyjkę przypadkiem (może być apokryficzna) i dodałem do niej prosty test. Jestem szczerze zdumiony dokładnością tak prostego triku. Jak pisałem, w wolnej chwili postaram się znaleźć rzeczywisty zbiór danych z prawdziwymi numerami seryjnymi i sprawdzić, czy przy rzeczywistych danych wzór działa równie dobrze.


Dodaj komentarz