Luokitusten säätäminen korottamalla kerhonsa pelaajia ei ole aivan
yksinkertaista. Kun pelaajamäärä on vähänkään suurempi, ongelmia
tuottaa se, että sillä, jolla korotusvastuu on, ei ole riittävää
omakohtaista tietoa kaikkien korotustarpeessa olevien pelaajien
nykyisestä pelitaidosta. 

[Markku Jantunen] ja minä kävimme sekä täällä wikissä että offlinenä
hieman keskustelua asian tiimoilta. Markku esitti, että pelaajien
välisten keskinäisten tasoituskivien määrän taulukoimalla voidaan
ainakin suuntaa-antavasti arvioida korotustarpeessa olevia pelaajia ja
korotusten suuruutta. Itse olin aikaisemmin käyttänyt samankaltaista
menetelmää [Oulun Goonpellaajien|Oulun Goonpellaajat] alkuaikoina,
kohtalaisin tuloksin. Esitän seuraavassa hieman viritetyn version
algoritmista luokitusten arvioimiseen siitä, minkä kukin pelaaja
luulee olevan oikea tasoitus suhteessa muihin.

Alla olevat esimerkit on kirjoitettu myös matlab (octave) -koodina,
joka toivottavasti auttaa insinöörejäkin ymmärtämään, mitä tarkoitan. 

Jokaiselta pelaajalta kysytään, mikä hänen mielestään on sopiva
tasoitus kunkin muun pelaajan kanssa, ja tulokset laitetaan
neliömatriisiin siten, että jokaisella rivillä on pelaajan näkemys
tasoituskivista sen sarakkeen kohdalla, jonka kanssa samannumeroinen
rivi vastaa k.o. pelaajan mielipiteitä. Mikäli arvausta ei ole
saatavissa, laitetaan arvoksi pelaajien luokitusero. Valkoisen antama
tasoitus on negatiivinen luku, mustan vastaanottama positiivinen.

Alla matriisiin __H__ on kirjoitettu neljän täysin fiktiivisen pelaajan
näkemykset siitä, mikä on tasaväkisen pelin aikaansaava tasoituskivien
määrä keskinäisissä peleissään. Huomataan, että pelaajat 1 ja 2
pelaavat keskenään tasa-avauksella ja pelaajat 3 ja 4 ovat
ensiksimainittuja joitakin kiviä heikompia.

{{{
>> H = [ 0 0 -8 -5; 0 0 -8 -4; 8 7 0 2; 5 5 -2 0]

H =

     0     0    -8    -5
     0     0    -8    -4
     8     7     0     2
     5     5    -2     0

}}}

Tarkoituksena on seuraavaksi laskea __kunkin__ __pelaajan__
__antama__ __tai__ __saama__ __keskimääräinen__
__tasoitus__. Tämän laskemiseksi matriisista __H__ vähennetään sen
transpoosi, jonka jälkeen rivit lasketaan yhteen ja tulos jaetaan
pelaajien määrällä kertaa kaksi. (Koska vähennettäessä transpoosi
luvut kaksinkertaistuvat.)


{{{

>> D = H - H'

D =

     0     0   -16   -10
     0     0   -15    -9
    16    15     0     4
    10     9    -4     0

>> h_rel = D * [1 1 1 1]' / (2*length(D))

h_rel =

   -3.2500
   -3.0000
    4.3750
    1.8750

}}}

Nyt vektorissa __h_rel__ on jokaisen pelaajan antama keskimääräinen
tasoitus. Miten tämä liittyy pelaajien luokituksiin? Kun lasketaan
__pelaajien__ __keskimääräinen__ __luokitus__, on keskimääräinen
tasoituskivien määrä suoraan suhteessa tähän. Kirjoitetaan pelaajien
nimelliset luokitukset vektoriin __r__ ja lisätään sen keskiarvo
vektoriin __h_rel__.

{{{

>> r = [2 3 11 8]'

r =

     2
     3
    11
     8

>> r_est = h_rel + mean(r)

r_est =

    2.7500
    3.0000
   10.3750
    7.8750

}}}

Nyt vektorissa __r_est__ on estimaatti kunkin pelaajan
luokituksesta. Vektori __r_est__ on minimietäisyydellä nimellisistä
luokituksista. Mikäli nimelliset ja arvioidut luokitukset poikkeavat
toisistaan, on syytä harkita korotuksia. Korotusmääriä voi kokeilla
muuttamalla nimellisten luokitusten arvoja vektorissa __r__ ja
esim. laskemalla keskimääräisen neliövirheen.

{{{
>> r_mse = sum((r_est - r).^2 ) / length(r_est)

r_mse =

    0.2422

}}}

Edellisestä menetelmästä täytyy huomata, että se perustuu kahteen
oletukseen: 

# Pelaajien luokitusero ja käytetty tasoituskivien määrä ovat
  toisiansa vastaavia, mikäli luokitukset ovat oikein.
# Pelaajat osaavat arvioida oikean tasoituskivien määrän
  suurinpiirtein oikein


--[Paavo Pietarila] 12-01-03