Opas

Asiakassegmentointi BigQuery ML:llä

Asiakassegmentointi auttaa tunnistamaan ryhmiä, joiden osto- tai käyttötavat poikkeavat toisistaan. BigQuery ML:llä ryhmittely voidaan rakentaa tietovarastossa SQL:n avulla. Tässä oppaassa muodostamme ostohistoriasta neljän ryhmän kokeilun ja käymme läpi, miten ryhmien käyttökelpoisuutta arvioidaan liiketoiminnan kanssa.

Julkaistu 2026-09-19 · Lukuaika 12 min

Kirjoittaja: · 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.

Asiakaskohtainen aineisto ja perustarkistukset
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.

Neljä ryhmää ostohistorian perusteella
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.

Ryhmät tunnisteineen tulostauluun
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.

Ryhmien koon ja ostomittarien vertailu
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

Keskustellaan seuraavasta kehitysaskeleesta

Kertokaa tavoitteistanne ja nykyisestä ympäristöstänne. Arvioimme yhdessä sopivan aloituskohdan ja yhteistyömallin. Ensimmäinen keskustelu on maksuton.