ビジネスオペレーションでは、クラスター分析により、ユーザー、商品、市場などの類似オブジェクトを識別できます。 クラスター分析結果に基づいてマーケティング戦略を策定し、効率と収益性を向上させることができます。 このトピックでは、クラスター分析関数の構文について説明します。 このトピックでは、関数の使用方法の例。
背景情報
clustering_centroids関数およびto_cluster_label関数のサンプルログおよびサンプルインデックス
次の図は、サンプルインデックスを示しています。 詳細については、「インデックスの作成」をご参照ください。
次のコードは、サンプルログを示しています。
{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"}
クラスタリング関数のサンプルログとサンプルインデックス
次の図は、サンプルインデックスを示しています。 詳細については、「インデックスの作成」をご参照ください。
次のコードは、サンプルログを示しています。
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(array(double)) サンプル、整数num_of_clusters) | オブジェクト属性を記述する入力サンプルデータを分類します。 取得するクラスの数を指定できます。 サンプルデータが分類された後、clustering_centroids関数は各クラスの平均値を返します。 クラスの平均値は、クラスの重心と呼ばれます。 | array(array(double)) | |
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次元配列です。 |
| 取得するクラスの数。 |
例
クエリ文
* | 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次元アレイを構成する。 |
| 管理するオブジェクトの属性ベクトル。 各属性ベクトルは、オブジェクトの特性または属性のセットを指定する。 |
例
クエリ文
* | 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)
パラメーター | 説明 |
| オブジェクトの複数の属性フィールドで構成される1次元配列。 フィールドタイプが文字列に変換されていることを確認します。 元のフィールドタイプは、数値または離散テキストです。 |
| 属性フィールドの名前で構成される1次元配列。 フィールドタイプが数値に変換され、正規化されていることを確認します。 これにより、その後のデータ分析が容易になる。 |
| 属性フィールドのデータ型で構成される1次元配列。 フィールドタイプが数値に変換され、正規化されていることを確認します。 これにより、その後のデータ分析が容易になる。 属性フィールドのサポートされているデータ型:
重要
|
| オプションです。 取得するクラスの数。 このパラメーターに値を指定しない場合、値は自動的に指定されます。 |
例
クエリ文
クエリ文では、クラスタリング関数は入力サンプルデータをクラスター化して分析し、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
...
...
...