Segmenteringsmodellen er udviklet i Python med sklearn (version 1.0). Modellen kan hentes direkte fra dette repository. Herunder er et Python eksempel, hvor modellen anvendt på et mindre datasæt.
Dokumentation:
- sklearn https://scikit-learn.org/stable/modules/generated/sklearn.cluster.KMeans.html
- kmeans https://en.wikipedia.org/wiki/K-means_clustering
Segmenteringsmodellen er baseret på disse ti spørgsmål:
- Vi burde gøre mere for flygtninge, der kommer til Danmark, end vi gør i dag
- Den offentlige sektor er for stor
- Vi betaler for meget i skat i Danmark
- Vi skal have styr på vores egne problemer, før vi hjælper andre lande
- Enhver er sin egen lykkes smed
- Jeg køber altid økologiske eller miljøvenlige produkter, hvis jeg kan
- Det er vigtigt for mig at have den nyeste teknologi på markedet
- Jeg kan ikke forestille mig en hverdag uden min smartphone
- Jeg kommer let til at kede mig, hvis jeg laver de samme ting
- Jeg vil følge moden
I data skal disse navngives sådan at spørgsmål 1 hedder Q1, spørgsmål 2 hedder Q2 osv.
Svarmulighederne på spørgsmålene er:
- Fuldstændig uenig
- Uenig
- Nærmest uenig
- Nærmest enig
- Enig
- Fuldstændig enig
Vi anbefaler, at man ikke giver responder muligheden for at svare 'Ved ikke'. Hvis man - mod vores anbefaling - vælger at give dem muligeden, så kan man håndtere det på følgende måde:
- Aktivt tage stilling til, hvor mange spørgsmål en respondent må have svaret 'Ved ikke' på, før de bliver sorteret fra.
- Erstatte 'Ved ikke' svar med gennemsnittet af, hvad de resterende respondenter har svaret.
Importerer de nødvendige Python biblioteker:
import pickle
import pandas as pd
from sklearn.cluster import KMeans
Indlæser og inspicerer data:
data = pd.read_csv("data.csv")
print(data.head())
id | Q1 | Q2 | Q3 | Q4 | Q5 | Q6 | Q7 | Q8 | Q9 | Q10 |
---|---|---|---|---|---|---|---|---|---|---|
0 | Fuldstændig uenig | Fuldstændig enig | Uenig | Fuldstændig enig | Fuldstændig enig | Nærmest enig | Nærmest uenig | Nærmest enig | Nærmest uenig | Uenig |
1 | Nærmest uenig | Enig | Fuldstændig enig | Enig | Enig | Nærmest uenig | Nærmest uenig | Fuldstændig enig | Nærmest uenig | Nærmest uenig |
2 | Enig | Nærmest uenig | Enig | Nærmest enig | Enig | Fuldstændig uenig | Uenig | Nærmest enig | Uenig | Uenig |
3 | Nærmest enig | Nærmest uenig | Nærmest uenig | Nærmest uenig | Nærmest enig | Fuldstændig uenig | Uenig | Uenig | Nærmest uenig | Uenig |
4 | Nærmest enig | Uenig | Uenig | Nærmest uenig | Nærmest uenig | Nærmest uenig | Nærmest uenig | Nærmest enig | Uenig | Fuldstændig uenig |
... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
Denne tabel indeholder de fem første observationer af 'data'
I dette datasæt er svarene i tekstformat. Kmeans-modellen kan ikke anvendes på tekstdata. Derfor skal teksten i kolonnerne ændres til numeriske værdier:
replace_dict = {"Fuldstændig uenig": 1,
"Uenig": 2,
"Nærmest uenig": 3,
"Nærmest enig": 4,
"Enig": 5,
"Fuldstændig enig": 6}
data.iloc[:,:] = data.iloc[:,:].replace(replace_dict)
print(data.head())
id | Q1 | Q2 | Q3 | Q4 | Q5 | Q6 | Q7 | Q8 | Q9 | Q10 |
---|---|---|---|---|---|---|---|---|---|---|
0 | 1 | 6 | 2 | 6 | 6 | 4 | 3 | 4 | 3 | 2 |
1 | 3 | 5 | 6 | 5 | 5 | 3 | 3 | 6 | 3 | 3 |
2 | 5 | 3 | 5 | 4 | 5 | 1 | 2 | 4 | 2 | 2 |
3 | 4 | 3 | 3 | 3 | 4 | 1 | 2 | 2 | 3 | 2 |
4 | 4 | 2 | 2 | 3 | 3 | 3 | 3 | 4 | 2 | 1 |
... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
Denne tabel indeholder de fem første observationer af 'data'
Data er nu numerisk.
Modellen loades og benyttes på data:
with open("kmeans.pickle", "rb") as f:
kmeans = pickle.load(f)
data["segment"] = kmeans.predict(data)
Segmenterne kommer i første omgang ud som numeriske værdier. Her ændres værdierne til navnene på segmenterne:
replace_dict_segment = {0: "Selvudviklerne",
1: "Individualisterne",
2: "Pragmatikerne",
3: "Idealisterne",
4: "Beskytterne"}
data["segment"] = data["segment"].replace(replace_dict_segment)
print(data.head())
id | Q1 | Q2 | Q3 | Q4 | Q5 | Q6 | Q7 | Q8 | Q9 | Q10 | segment |
---|---|---|---|---|---|---|---|---|---|---|---|
0 | 1 | 6 | 2 | 6 | 6 | 4 | 3 | 4 | 3 | 2 | Beskytterne |
1 | 3 | 5 | 6 | 5 | 5 | 3 | 3 | 6 | 3 | 3 | Individualisterne |
2 | 5 | 3 | 5 | 4 | 5 | 1 | 2 | 4 | 2 | 2 | Pragmatikerne |
3 | 4 | 3 | 3 | 3 | 4 | 1 | 2 | 2 | 3 | 2 | Pragmatikerne |
4 | 4 | 2 | 2 | 3 | 3 | 3 | 3 | 4 | 2 | 1 | Idealisterne |
... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
Denne tabel indeholder de fem første observationer af 'data'
I ovenstående tabel er resultatet af segmenteringsmodellen på de fem første observationer tilføjet i kolonnen 'segment'