すべてのプロダクト
Search
ドキュメントセンター

Simple Log Service:クラスター分析関数

最終更新日:Oct 21, 2024

ビジネスオペレーションでは、クラスター分析により、ユーザー、商品、市場などの類似オブジェクトを識別できます。 クラスター分析結果に基づいてマーケティング戦略を策定し、効率と収益性を向上させることができます。 このトピックでは、クラスター分析関数の構文について説明します。 このトピックでは、関数の使用方法の例。

背景情報

  • clustering_centroids関数およびto_cluster_label関数のサンプルログおよびサンプルインデックス

    • 次の図は、サンプルインデックスを示しています。 詳細については、「インデックスの作成」をご参照ください。

      image

    • 次のコードは、サンプルログを示しています。

      {PushBack"entity_group":"A","entity_id":"0","x0":"9.43755123272417","x1":"10.9239183048056"}
      {PushBack"entity_group":"A","entity_id":"1","x0":"9.90934789781198","x1":"10.0410638670737"}
      {PushBack"entity_group":"A","entity_id":"2","x0":"10.0237761750608","x1":"11.5427618678773"}
      {PushBack"entity_group":"A","entity_id":"3","x0":"8.76413639285441","x1":"9.91100696065114"}
      {PushBack"entity_group":"A","entity_id":"4","x0":"9.72866019535702","x1":"10.9289903697879"}
      {PushBack"entity_group":"A","entity_id":"5","x0":"9.31732230036184","x1":"9.70753937768216"}
      {PushBack"entity_group":"A","entity_id":"6","x0":"10.25881289615","x1":"9.74090182514911"}
      {PushBack"entity_group":"A","entity_id":"7","x0":"10.7476586051507","x1":"9.68058142945478"}
      {PushBack"entity_group":"A","entity_id":"8","x0":"10.4225378902342","x1":"11.2940460054908"}
      {PushBack"entity_group":"A","entity_id":"9","x0":"9.60791396236535","x1":"9.74099863764865"}
      {PushBack"entity_group":"A","entity_id":"10","x0":"-9.88083328783069","x1":"9.96483490201365"}
      {PushBack"entity_group":"A","entity_id":"11","x0":"-9.2566893228908","x1":"10.4709996742353"}
      {PushBack"entity_group":"A","entity_id":"12","x0":"-9.42075011656993","x1":"10.2225398224866"}
      {PushBack"entity_group":"A","entity_id":"13","x0":"-11.0476084082138","x1":"9.6602175401245"}
      {PushBack"entity_group":"A","entity_id":"14","x0":"-10.4835290932454","x1":"10.0468761053371"}
      {PushBack"entity_group":"A","entity_id":"15","x0":"-10.0712229897491","x1":"10.7961735513211"}
      {PushBack"entity_group":"A","entity_id":"16","x0":"-9.20579985976076","x1":"11.3595617847332"}
      {PushBack"entity_group":"A","entity_id":"17","x0":"-10.2257991823914","x1":"11.5241122586671"}
      {PushBack"entity_group":"A","entity_id":"18","x0":"-9.53462858712671","x1":"10.4203828737972"}
      {PushBack"entity_group":"A","entity_id":"19","x0":"-9.32911152937254","x1":"8.64624234507702"}
      {PushBack"entity_group":"A","entity_id":"20","x0":"10.0383094216576","x1":"-10.8386382322694"}
  • クラスタリング関数のサンプルログとサンプルインデックス

    • 次の図は、サンプルインデックスを示しています。 詳細については、「インデックスの作成」をご参照ください。

      image

    • 次のコードは、サンプルログを示しています。

      1,Male,27,Software Engineer,6.1,6,42,6,Overweight,126,83,77,4200,None
      2,Male,28,Doctor,6.2,6,60,8,Normal,125,80,75,10000,None
      3,Male,28,Doctor,6.2,6,60,8,Normal,125,80,75,10000,None
      4,Male,28,Sales Representative,5.9,4,30,8,Obese,140,90,85,3000,Sleep Apnea
      5,Male,28,Sales Representative,5.9,4,30,8,Obese,140,90,85,3000,Sleep Apnea
      6,Male,28,Software Engineer,5.9,4,30,8,Obese,140,90,85,3000,Insomnia
      7,Male,29,Teacher,6.3,6,40,7,Obese,140,90,82,3500,Insomnia
      8,Male,29,Doctor,7.8,7,75,6,Normal,120,80,70,8000,None
      9,Male,29,Doctor,7.8,7,75,6,Normal,120,80,70,8000,None
      10,Male,29,Doctor,7.8,7,75,6,Normal,120,80,70,8000,None
      11,Male,29,Doctor,6.1,6,30,8,Normal,120,80,70,8000,None
      12,Male,29,Doctor,7.8,7,75,6,Normal,120,80,70,8000,None
      13,Male,29,Doctor,6.1,6,30,8,Normal,120,80,70,8000,None
      14,Male,29,Doctor,6,6,30,8,Normal,120,80,70,8000,None
      15,Male,29,Doctor,6,6,30,8,Normal,120,80,70,8000,None
      16,Male,29,Doctor,6,6,30,8,Normal,120,80,70,8000,None
      17,Female,29,Nurse,6.5,5,40,7,Normal Weight,132,87,80,4000,Sleep Apnea
      18,Male,29,Doctor,6,6,30,8,Normal,120,80,70,8000,Sleep Apnea
      19,Female,29,Nurse,6.5,5,40,7,Normal Weight,132,87,80,4000,Insomnia
      20,Male,30,Doctor,7.6,7,75,6,Normal,120,80,70,8000,None
      21,Male,30,Doctor,7.7,7,75,6,Normal,120,80,70,8000,None
      22,Male,30,Doctor,7.7,7,75,6,Normal,120,80,70,8000,None
      23,Male,30,Doctor,7.7,7,75,6,Normal,120,80,70,8000,None
      24,Male,30,Doctor,7.7,7,75,6,Normal,120,80,70,8000,None
      25,Male,30,Doctor,7.8,7,75,6,Normal,120,80,70,8000,None
      26,Male,30,Doctor,7.9,7,75,6,Normal,120,80,70,8000,None
      27,Male,30,Doctor,7.8,7,75,6,Normal,120,80,70,8000,None
      28,Male,30,Doctor,7.9,7,75,6,Normal,120,80,70,8000,None
      29,Male,30,Doctor,7.9,7,75,6,Normal,120,80,70,8000,None
      30,Male,30,Doctor,7.9,7,75,6,Normal,120,80,70,8000,None
      31,Female,30,Nurse,6.4,5,35,7,Normal Weight,130,86,78,4100,Sleep Apnea
      32,Female,30,Nurse,6.4,5,35,7,Normal Weight,130,86,78,4100,Insomnia
      33,Female,31,Nurse,7.9,8,75,4,Normal Weight,117,76,69,6800,None
      34,Male,31,Doctor,6.1,6,30,8,Normal,125,80,72,5000,None
      35,Male,31,Doctor,7.7,7,75,6,Normal,120,80,70,8000,None
      36,Male,31,Doctor,6.1,6,30,8,Normal,125,80,72,5000,None
      37,Male,31,Doctor,6.1,6,30,8,Normal,125,80,72,5000,None
      38,Male,31,Doctor,7.6,7,75,6,Normal,120,80,70,8000,None
      39,Male,31,Doctor,7.6,7,75,6,Normal,120,80,70,8000,None
      40,Male,31,Doctor,7.6,7,75,6,Normal,120,80,70,8000,None
      41,Male,31,Doctor,7.7,7,75,6,Normal,120,80,70,8000,None
      42,Male,31,Doctor,7.7,7,75,6,Normal,120,80,70,8000,None
      43,Male,31,Doctor,7.7,7,75,6,Normal,120,80,70,8000,None
      44,Male,31,Doctor,7.8,7,75,6,Normal,120,80,70,8000,None
      45,Male,31,Doctor,7.7,7,75,6,Normal,120,80,70,8000,None
      46,Male,31,Doctor,7.8,7,75,6,Normal,120,80,70,8000,None
      47,Male,31,Doctor,7.7,7,75,6,Normal,120,80,70,8000,None
      48,Male,31,Doctor,7.8,7,75,6,Normal,120,80,70,8000,None
      49,Male,31,Doctor,7.7,7,75,6,Normal,120,80,70,8000,None
      50,Male,31,Doctor,7.7,7,75,6,Normal,120,80,70,8000,Sleep Apnea
      51,Male,32,Engineer,7.5,8,45,3,Normal,120,80,70,8000,None
      52,Male,32,Engineer,7.5,8,45,3,Normal,120,80,70,8000,None
      53,Male,32,Doctor,6,6,30,8,Normal,125,80,72,5000,None
      54,Male,32,Doctor,7.6,7,75,6,Normal,120,80,70,8000,None
      55,Male,32,Doctor,6,6,30,8,Normal,125,80,72,5000,None
      56,Male,32,Doctor,6,6,30,8,Normal,125,80,72,5000,None
      57,Male,32,Doctor,7.7,7,75,6,Normal,120,80,70,8000,None
      58,Male,32,Doctor,6,6,30,8,Normal,125,80,72,5000,None
      59,Male,32,Doctor,6,6,30,8,Normal,125,80,72,5000,None
      60,Male,32,Doctor,7.7,7,75,6,Normal,120,80,70,8000,None
      61,Male,32,Doctor,6,6,30,8,Normal,125,80,72,5000,None
      62,Male,32,Doctor,6,6,30,8,Normal,125,80,72,5000,None
      63,Male,32,Doctor,6.2,6,30,8,Normal,125,80,72,5000,None
      64,Male,32,Doctor,6.2,6,30,8,Normal,125,80,72,5000,None
      65,Male,32,Doctor,6.2,6,30,8,Normal,125,80,72,5000,None
      66,Male,32,Doctor,6.2,6,30,8,Normal,125,80,72,5000,None
      67,Male,32,Accountant,7.2,8,50,6,Normal Weight,118,76,68,7000,None
      68,Male,33,Doctor,6,6,30,8,Normal,125,80,72,5000,Insomnia
      69,Female,33,Scientist,6.2,6,50,6,Overweight,128,85,76,5500,None
      70,Female,33,Scientist,6.2,6,50,6,Overweight,128,85,76,5500,None
      71,Male,33,Doctor,6.1,6,30,8,Normal,125,80,72,5000,None
      72,Male,33,Doctor,6.1,6,30,8,Normal,125,80,72,5000,None
      73,Male,33,Doctor,6.1,6,30,8,Normal,125,80,72,5000,None
      74,Male,33,Doctor,6.1,6,30,8,Normal,125,80,72,5000,None
      75,Male,33,Doctor,6,6,30,8,Normal,125,80,72,5000,None
      76,Male,33,Doctor,6,6,30,8,Normal,125,80,72,5000,None
      77,Male,33,Doctor,6,6,30,8,Normal,125,80,72,5000,None
      78,Male,33,Doctor,6,6,30,8,Normal,125,80,72,5000,None
      79,Male,33,Doctor,6,6,30,8,Normal,125,80,72,5000,None
      80,Male,33,Doctor,6,6,30,8,Normal,125,80,72,5000,None
      81,Female,34,Scientist,5.8,4,32,8,Overweight,131,86,81,5200,Sleep Apnea
      82,Female,34,Scientist,5.8,4,32,8,Overweight,131,86,81,5200,Sleep Apnea
      83,Male,35,Teacher,6.7,7,40,5,Overweight,128,84,70,5600,None
      84,Male,35,Teacher,6.7,7,40,5,Overweight,128,84,70,5600,None
      85,Male,35,Software Engineer,7.5,8,60,5,Normal Weight,120,80,70,8000,None
      86,Female,35,Accountant,7.2,8,60,4,Normal,115,75,68,7000,None
      87,Male,35,Engineer,7.2,8,60,4,Normal,125,80,65,5000,None
      88,Male,35,Engineer,7.2,8,60,4,Normal,125,80,65,5000,None
      89,Male,35,Engineer,7.3,8,60,4,Normal,125,80,65,5000,None
      90,Male,35,Engineer,7.3,8,60,4,Normal,125,80,65,5000,None
      91,Male,35,Engineer,7.3,8,60,4,Normal,125,80,65,5000,None
      92,Male,35,Engineer,7.3,8,60,4,Normal,125,80,65,5000,None
      93,Male,35,Software Engineer,7.5,8,60,5,Normal Weight,120,80,70,8000,None
      94,Male,35,Lawyer,7.4,7,60,5,Obese,135,88,84,3300,Sleep Apnea
      95,Female,36,Accountant,7.2,8,60,4,Normal,115,75,68,7000,Insomnia
      96,Female,36,Accountant,7.1,8,60,4,Normal,115,75,68,7000,None
      97,Female,36,Accountant,7.2,8,60,4,Normal,115,75,68,7000,None
      98,Female,36,Accountant,7.1,8,60,4,Normal,115,75,68,7000,None
      99,Female,36,Teacher,7.1,8,60,4,Normal,115,75,68,7000,None
      100,Female,36,Teacher,7.1,8,60,4,Normal,115,75,68,7000,None
      101,Female,36,Teacher,7.2,8,60,4,Normal,115,75,68,7000,None

関数

クラスター分析は、データセット内のオブジェクトをさまざまなクラスに自動的に分類するデータマイニング手法です。 このように、同じクラスのオブジェクトは高い類似度を有し、異なるクラスのオブジェクトは低い類似度を有する。

関数

構文

説明

戻り値のデータ型

clustering_centroids関数

clustering_centroids(array(double)) サンプル、整数num_of_clusters)

オブジェクト属性を記述する入力サンプルデータを分類します。 取得するクラスの数を指定できます。 サンプルデータが分類された後、clustering_centroids関数は各クラスの平均値を返します。 クラスの平均値は、クラスの重心と呼ばれます。

array(array(double))

to_cluster_label関数

to_cluster_label(array(array(double))) centroids, array(double) attribute_vector)

オブジェクトの属性ベクトルと既存のクラスの重心に基づいて、オブジェクトを最も近いクラスに割り当て、オブジェクトが割り当てられているクラスのIDを返します。 centroidsはclustering_centroids関数によって返されます。

long

クラスタリング関数

array(array(varchar)) clustering(array(varchar) attribute_vector, array(varchar) attribute_name_vector, array(varchar) attribute_data_type_vector, integer num_of_clusters)

入力サンプルデータをクラスター化して分析し、オブジェクトとオブジェクトのクラスIDで構成される2次元の文字列配列を返します。

array(array(varchar))

clustering_centroids関数

クラスタリングは、データセット内のオブジェクトを重複しないクラスに分類するために使用できる教師なし学習方法です。 このように、同じクラスのオブジェクトは高い類似度を有し、異なるクラスのオブジェクトは低い類似度を有する。 clustering_centroids関数は、入力サンプルデータと指定したクラスの数に基づいて、クラスの重心を返します。 サンプルデータは2次元配列である。

array(array(double)) clustering_centroids(array(array(double)) samples, long num_of_clusters)

パラメーター

説明

サンプル

2次元アレイ。 配列は2次元テーブルとして使用できます。 テーブル内のデータの各行は、オブジェクトの属性ベクトルを指定する1次元配列です。

num_of_clusters

取得するクラスの数。

  • クエリ文

    * | select entity_group,
        clustering_centroids(array_agg(array[x0, x1]), 5) as cluster_centroids
    from log
    group by entity_group
  • クエリおよび分析の結果

    この関数は、クラスの重心で構成される2次元配列を返します。 クラスの各重心は、オブジェクトの属性ベクトルを指定する1次元配列です。

    entity_group

    cluster_centroids

    A

    [[-9.845597237715113、10.311194085779278] 、[-9.512707125089744、-9.890571794654335] 、[9.821771754807048、10.351180864562114] 、[10.66747750273295、-9.081622556974239] 、[9.361759158361564、-9.91604553609393]]

to_cluster_label関数

to_cluster_label関数は、既存のクラスの重心に基づいてオブジェクトを最も近いクラスに割り当て、オブジェクトが割り当てられているクラスのIDを返します。 centroidsはclustering_centroids関数によって返されます。

long to_cluster_label(array(array(double)) centroids, array(double) attribute_vector)

パラメーター

説明

セントロイド

clustering_centroids関数によって返されるクラスの重心。 重心は2次元アレイを構成する。

attribute_vector

管理するオブジェクトの属性ベクトル。 各属性ベクトルは、オブジェクトの特性または属性のセットを指定する。

  • クエリ文

    * | with centroids as
    (
        select entity_group,
            clustering_centroids(array_agg(array[x0, x1]), 5) as cluster_centroids
        from log
        group by entity_group
    )
    select t1.entity_id,
        t1.entity_group,
        to_cluster_label(t2.cluster_centroids, array[t1.x0, t1.x1]) as cluster_label
    from log as t1
        join centroids as t2
        on t1.entity_group = t2.entity_group
    order by entity_id
    limit 100000
  • クエリおよび分析の結果

    クエリおよび分析結果のcluster_labelフィールドは、クラスのIDを示します。

    entity_id

    entity_group

    cluster_label

    0

    A

    3

    1

    A

    3

    2

    A

    3

    ...

    ...

    ...

クラスタリング関数

クラスタリング関数は、入力サンプルデータをクラスタリングして分析し、オブジェクトとオブジェクトのクラスIDで構成される2次元文字列配列を返します。

array(array(varchar)) clustering(array(varchar) attribute_vector, array(varchar) attribute_name_vector, array(varchar) attribute_data_type_vector, integer num_of_clusters)

パラメーター

説明

attribute_vector

オブジェクトの複数の属性フィールドで構成される1次元配列。 フィールドタイプが文字列に変換されていることを確認します。 元のフィールドタイプは、数値または離散テキストです。

attribute_name_ベクトル

属性フィールドの名前で構成される1次元配列。 フィールドタイプが数値に変換され、正規化されていることを確認します。 これにより、その後のデータ分析が容易になる。

attribute_data_type_ベクトル

属性フィールドのデータ型で構成される1次元配列。 フィールドタイプが数値に変換され、正規化されていることを確認します。 これにより、その後のデータ分析が容易になる。

属性フィールドのサポートされているデータ型:

  • ID_STR: オブジェクトの文字列型のID。

  • ID_NUM: オブジェクトの数値型のID。

  • X_STR_CATEGORICAL: 文字列型の離散データ。 たとえば、フィールドの有効な値は、男性、女性、および不明です。

  • X_NUM_CATEGORICAL: 数値型の離散データ。 たとえば、フィールドの有効な値は1、2、3、4、および5です。

  • X_NUMERIC: 数値型の連続データ。

重要

attribute_vectorattribute_name_vector、およびattribute_data_type_vectorパラメーターで指定される配列の長さは同じである必要があります。 たとえば、10個のインデックス付きフィールドがクラスター分析に使用される場合、attribute_vectorパラメーター値は10個のインデックス付きフィールドの値で構成され、attribute_name_vectorパラメーター値は10個のインデックス付きフィールドの名前で構成され、attribute_data_type_vectorパラメーター値は10個のインデックス付きフィールドのデータ型で構成されます。

num_of_clusters

オプションです。 取得するクラスの数。 このパラメーターに値を指定しない場合、値は自動的に指定されます。

  • クエリ文

    クエリ文では、クラスタリング関数は入力サンプルデータをクラスター化して分析し、UNNEST句は関数の結果を展開します。 詳細については、「UNNEST句」をご参照ください。

    * | with clustering_agg as
    (
      select group_id,
      clustering(
        array[cast(person_id as varchar),
              cast(gender as varchar),
              cast(age as varchar),
              cast(occupation as varchar),
              cast(sleep_duration as varchar),
              cast(quality_of_sleep as varchar),
              cast(physical_activity_level as varchar),
              cast(stress_level as varchar),
              cast(bmi_category as varchar),
              cast(blood_pressure_systolic as varchar),
              cast(blood_pressure_diastolic as varchar),
              cast(heart_rate as varchar),
              cast(daily_steps as varchar)], -- The attribute fields of the object. The value is an array that contains the object ID field. You can extract the object ID field after the UNNEST clause expands the clustering results.
        array['person_id', 'gender', 'age', 'occupation', 'sleep_duration',
              'quality_of_sleep', 'physical_activity_level', 'stress_level',
              'bmi_category', 'blood_pressure_systolic', 'blood_pressure_diastolic',
              'heart_rate', 'daily_steps'], -- The names of the attribute fields.
        array['ID_NUM',
              'X_STR_CATEGORICAL',
              'X_NUMERIC',
              'X_STR_CATEGORICAL',
              'X_NUMERIC',
              'X_NUMERIC',
              'X_NUMERIC',
              'X_NUMERIC',
              'X_STR_CATEGORICAL',
              'X_NUMERIC',
              'X_NUMERIC',
              'X_NUMERIC',
              'X_NUMERIC'],  -- The data types of the attribute fields.
        5  -- The number of classes that you want to obtain.
      ) as clustering_outcome
      from (
        select 'G1' as group_id, -- The group_id field indicates that an aggregate function is used.
            * from  log
      )as sleep_health_group_data
      group by group_id
    )
    
    select ca.group_id,
    	t. person_cluster[1] as person_id,
    	t. person_cluster[2] as cluster_id
    from clustering_agg as ca
    	cross join unnest(clustering_outcome) as t(person_cluster)
  • クエリおよび分析の結果

    グループ_id

    person_id

    cluster_id

    G1

    266

    1

    G1

    268

    1

    ...

    ...

    ...