Kirjoittaja: Vectura Solutions Oy · Data-analytiikan ja raportoinnin toteutuksia vuodesta 2018.
Aihe: Koneoppiminen
Oppaan ydinkohdat
- Valitkaa ensin päätös, jossa segmenttejä käytetään, ja samaa ajanjaksoa kuvaavat asiakaskohtaiset tiedot.
- K-means ryhmittelee havaintoja samankaltaisuuden perusteella. Ryhmien nimet ja liiketoimintamerkitys määritellään tulosten tarkastelussa.
- Segmentin numero ei ole pysyvä asiakasluokka. Säilyttäkää malliversio ja arvioikaa toimenpiteiden vaikutus erikseen.
Mihin asiakassegmentointia kannattaa käyttää?
Segmentointi voi tukea esimerkiksi asiakkuuksien hoitomallien, palvelujen tai viestinnän suunnittelua. Ensin sovitaan, mitä ryhmän tunteminen muuttaa: saako asiakas erilaisen palvelupolun vai tarkastellaanko ryhmiä ainoastaan raportoinnissa?
Aloittakaa vertailusta nykyisiin ryhmiin. Jos yksinkertainen jako uusiin, toistuviin ja pitkään passiivisiin asiakkaisiin palvelee päätöstä hyvin, koneoppimisen pitää tuoda perusteltua lisäarvoa. Ryhmien määrän kasvattaminen lisää myös erilaisten toimintatapojen ylläpitoa.
Tässä käytetään ostohistoriaa. Käyttäjäsegmentoinnissa vastaavia piirteitä voivat olla palvelun käytön tiheys ja eri toimintojen käyttö. Eri aineistot tarvitsevat omat määritelmänsä; pelkkää sivunäyttömäärää ei pidä tulkita asiakkaan arvoksi.
Valmistelkaa yksi rivi asiakasta ja tarkastelupäivää kohden
Esimerkin lähde on valmiiksi muodostettu oma-projekti.analytics.customer_features. RFM kuvaa oston tuoreutta, ostotiheyttä ja rahamäärää: recency_days kertoo päivät viimeisimmästä ostosta, orders_90d tilausten määrän ja spend_90d sovitun myynnin määrän viimeiseltä 90 päivältä.
Määritelkää 90 päivän ikkuna samalla tavalla kaikille asiakkaille. Tässä snapshot_date on ikkunan viimeinen kokonainen päivä ja mukaan otetaan sen sekä edeltävien 89 päivän ostot. Esimerkkijoukossa ovat vain tuona aikana ostaneet asiakkaat. Ilman ostohistoriaa olevat asiakkaat käsitellään erillisenä ryhmänä.
customer_key on yrityksen sisäinen STRING-tyyppinen asiakasavain ja snapshot_date on DATE. recency_days ja orders_90d ovat INT64-kenttiä, spend_90d on NUMERIC. Lähteessä pitää olla yksi rivi per asiakas ja päivä. Esimerkki edellyttää puuttumattomia, ei-negatiivisia lukuja ja vähintään yhtä tilausta asiakkaalta. Jos palautukset tekevät rahamäärästä negatiivisen, sopikaa sille erillinen käsittely ennen tätä esimerkkiä; älkää poistako poikkeavia asiakkaita huomaamatta.
Sopikaa valuutta, verojen käsittely, peruutusten vaikutus ja asiakastunnisteiden yhdistäminen lähdejärjestelmissä. Nimiä tai sähköpostiosoitteita ei tarvita mallin piirteiksi. Käsitelkää myös sisäisiä tunnisteita yrityksen tietojen käyttöä koskevien käytäntöjen mukaisesti.
Ottakaa kokeiluun muuttumaton aineisto
Vaihtakaa projektitunnus ja päivämäärä omiin tietoihinne. Luokaa ml_demo-dataset lähteen kanssa samaan BigQuery-sijaintiin ja varmistakaa tarvittavat oikeudet sekä laskutus. CREATE OR REPLACE korvaa samannimisen kokeilutaulun tai mallin.
Alla jäädytetään yksi tarkastelupäivä ja pysäytetään esimerkki, jos avaimissa tai arvoissa on ongelma. Pitäkää tämä taulu muuttumattomana opetuksen, ryhmittelyn ja tulkinnan ajan. Tarkistukset eivät yksin takaa, että lähdejärjestelmien tiedot ovat oikein.
CREATE OR REPLACE TABLE `oma-projekti.ml_demo.customer_snapshot` AS
SELECT customer_key, snapshot_date, recency_days, orders_90d, spend_90d
FROM `oma-projekti.analytics.customer_features`
WHERE snapshot_date = DATE '2026-09-15';
ASSERT (
SELECT COUNT(*) >= 4 AND COUNT(*) = COUNT(DISTINCT customer_key)
FROM `oma-projekti.ml_demo.customer_snapshot`
) AS 'Tarvitaan asiakaskohtaiset, yksikasitteiset avaimet';
ASSERT (
SELECT COUNTIF(
recency_days IS NULL OR recency_days < 0
OR orders_90d IS NULL OR orders_90d < 1
OR spend_90d IS NULL OR spend_90d < 0
) = 0
FROM `oma-projekti.ml_demo.customer_snapshot`
) AS 'Korjaa puuttuvat tai rajauksen vastaiset piirteet';Neljä riviä on tässä vain alarajan tarkistus. Käyttökelpoinen segmentointi tarvitsee tehtävään riittävän asiakasmäärän ja vaihtelua; neljää ryhmää varten myös erillisiä piirreyhdistelmiä pitää olla vähintään neljä.
Opettakaa K-means-malli
K-means etsii toisistaan erottuvia ryhmiä valittujen piirteiden etäisyyksien perusteella. Alla kokeillaan neljää ryhmää. Luku neljä on kokeiluasetus, ei suositus kaikille yrityksille.
Rahankäytön ja tilausten jakaumat voivat olla vinoja. Esimerkissä LN(1 + arvo) pienentää suurten lukujen vaikutusta, ja STANDARDIZE_FEATURES asettaa piirteet vertailukelpoisempaan mittakaavaan. Käsittely on osa mallin valintaa: tarkistakaa, sopiiko painotus liiketoiminnan kysymykseen. Asiakasavain ja tarkastelupäivä jätetään opetuksen ulkopuolelle.
CREATE OR REPLACE MODEL `oma-projekti.ml_demo.rfm_k4_20260919`
OPTIONS (
MODEL_TYPE = 'KMEANS',
NUM_CLUSTERS = 4,
KMEANS_INIT_METHOD = 'KMEANS++',
STANDARDIZE_FEATURES = TRUE
) AS
SELECT
LN(1 + recency_days) AS log_recency,
LN(1 + orders_90d) AS log_orders,
LN(1 + spend_90d) AS log_spend
FROM `oma-projekti.ml_demo.customer_snapshot`;Liittäkää ryhmä takaisin asiakkaaseen
ML.PREDICT palauttaa asiakkaan lähimmän ryhmäkeskuksen tunnisteen centroid_id-kentässä. Kysely käyttää täsmälleen samoja piirremuunnoksia kuin opetus. Asiakasavain ja päivämäärä kulkevat tulokseen, vaikka niitä ei käytetty mallin piirteinä.
Tulostaulun asiakasavain mahdollistaa liittämisen raportointiin tai sovittuun työnkulkuun. Malliversion ja tarkastelupäivän avulla pystytään jälkikäteen selvittämään, mihin aineistoon ryhmittely perustui. Esimerkin korvaava taulu on kokeilua varten; tuotannossa säilytetään tarvittava historia.
CREATE OR REPLACE TABLE `oma-projekti.ml_demo.customer_segments` AS
SELECT
customer_key,
snapshot_date,
centroid_id,
'rfm_k4_20260919' AS model_version
FROM ML.PREDICT(
MODEL `oma-projekti.ml_demo.rfm_k4_20260919`,
(
SELECT
customer_key,
snapshot_date,
LN(1 + recency_days) AS log_recency,
LN(1 + orders_90d) AS log_orders,
LN(1 + spend_90d) AS log_spend
FROM `oma-projekti.ml_demo.customer_snapshot`
)
);Tulkitkaa ryhmät alkuperäisillä liiketoimintamittareilla
Ryhmä 1 ei automaattisesti tarkoita parhaita asiakkaita. Tarkastelkaa ensin ryhmien kokoja ja alkuperäisiä ostomittareita. Nimet kuten toistuvasti ostavat tai harvoin asioivat perustellaan näistä havainnoista, eikä nimetä ryhmiä pelkän järjestysnumeron mukaan.
Keskiarvojen rinnalle tarvitaan jakaumien tarkastelua: pieni joukko suuria ostajia voi hallita rahamäärää. Selvittäkää myös, syntyvätkö erot eri mittaisista asiakkuuksista, tietojen puutteista tai eri lähdejärjestelmien kirjauksista.
SELECT
s.centroid_id,
COUNT(*) AS customers,
AVG(f.recency_days) AS avg_days_since_purchase,
AVG(f.orders_90d) AS avg_orders_90d,
AVG(f.spend_90d) AS avg_spend_90d
FROM `oma-projekti.ml_demo.customer_segments` AS s
JOIN `oma-projekti.ml_demo.customer_snapshot` AS f
USING (customer_key, snapshot_date)
GROUP BY s.centroid_id
ORDER BY s.centroid_id;Kokeilkaa tarvittaessa eri ryhmämääriä ja piirteitä. Arvioikaa ryhmien erottuvuutta, kokoa, ymmärrettävyyttä ja pysyvyyttä eri aineistoissa. Matemaattisesti erottuvat ryhmät eivät vielä takaa hyödyllisiä toimintatapoja.
Todentakaa hyöty ja hallitkaa muutokset
Segmentin mukaan toteutettu palvelu- tai viestintämuutos arvioidaan omana kokeenaan. Esimerkiksi ostojen kasvu ryhmässä ei yksin osoita toimenpiteen vaikutusta, jos ryhmä olisi muutenkin ostanut enemmän. Sopikaa vertailuryhmä ja tavoiteltava vaikutus ennen toimenpidettä.
Uudelleenopetus voi muuttaa sekä ryhmärajoja että niiden numerointia. Ryhmä 2 uudessa mallissa ei välttämättä vastaa vanhan mallin ryhmää 2. Tallentakaa malliversio ja tulkitkaa ryhmät uudelleen ennen niiden käyttämistä pysyvinä liiketoimintaluokkina.
Vectura voi yhdistää asiakas- ja käyttötiedot, toteuttaa segmentointikokeilun BigQuery ML:llä ja tuoda ryhmät BI-raportointiin. Kokemukseemme kuuluu käyttäjäsegmentointia mediatalon aineistossa. Toteutuksen rajaus, päivitysrytmi ja vaikutuksen arviointi sovitaan käyttötarpeen perusteella.
Tarvitsetteko asiakasryhmät päätöksenteon tueksi?
Vectura auttaa valitsemaan segmentoinnin käyttötarkoituksen, valmistelemaan aineiston ja arvioimaan ryhmien hyödyllisyyden. Ensimmäinen keskustelu on maksuton.
Keskustellaan toteutuksesta