推論バケット集約

親パイプライン集約で、事前にトレーニングされたモデルを読み込み、親バケット集約からの集約結果フィールドに対して推論を実行します。

推論バケット集約を使用するには、トレーニング済みモデルの取得 APIを使用するために必要なのと同じセキュリティ権限が必要です。

構文

inference 集約は、単独では次のようになります:

Js

  1. {
  2. "inference": {
  3. "model_id": "a_model_for_inference",
  4. "inference_config": {
  5. "regression_config": {
  6. "num_top_feature_importance_values": 2
  7. }
  8. },
  9. "buckets_path": {
  10. "avg_cost": "avg_agg",
  11. "max_cost": "max_agg"
  12. }
  13. }
  14. }
トレーニング済みモデルの一意の識別子またはエイリアス。
モデルのデフォルト設定を上書きするオプションの推論設定。
avg_agg の値をモデルの入力フィールド avg_cost にマップします。


表 61. inference パラメータ


| パラメータ名 | 説明 | 必須 | デフォルト値 |
| :— | :— | :— | :— |
| model_id | トレーニング済みモデルのIDまたはエイリアス。 | 必須 | - |
| inference_config | 推論タイプとそのオプションを含みます。2つのタイプがあります: regressionclassification | オプション | - |
| buckets_path | 入力集約へのパスを定義し、集約名をモデルが期待するフィールド名にマップします。

詳細については、buckets_path 構文を参照してください。 | 必須 | - |

推論モデルの設定オプション

inference_config 設定はオプションであり、通常は必要ありません。事前にトレーニングされたモデルは合理的なデフォルト設定が備わっています。集約の文脈では、2つのモデルタイプのそれぞれに対していくつかのオプションを上書きできます。

回帰モデルの設定オプション

  • num_top_feature_importance_values
  • (オプション、整数) 各ドキュメントごとの特徴重要度値の最大数を指定します。デフォルトはゼロで、特徴重要度の計算は行われません。

分類モデルの設定オプション

  • num_top_classes
  • (オプション、整数) 戻すトップクラス予測の数を指定します。デフォルトは0です。
  • num_top_feature_importance_values
  • (オプション、整数) 各ドキュメントごとの特徴重要度値の最大数を指定します。デフォルトは0で、特徴重要度の計算は行われません。
  • prediction_field_type
  • (オプション、文字列) 書き込む予測フィールドのタイプを指定します。有効な値は: string, number, boolean です。boolean が提供されると、1.0true に変換され、0.0false に変換されます。

次のスニペットは、client_ip によってウェブログを集約し、疑わしいクライアントIPを特定するためにトレーニングされたモデルで構成された推論集約への入力として、メトリックおよびバケットのサブ集約を介していくつかの特徴を抽出します:

Python

  1. resp = client.search(
  2. index="kibana_sample_data_logs",
  3. size=0,
  4. aggs={
  5. "client_ip": {
  6. "composite": {
  7. "sources": [
  8. {
  9. "client_ip": {
  10. "terms": {
  11. "field": "clientip"
  12. }
  13. }
  14. }
  15. ]
  16. },
  17. "aggs": {
  18. "url_dc": {
  19. "cardinality": {
  20. "field": "url.keyword"
  21. }
  22. },
  23. "bytes_sum": {
  24. "sum": {
  25. "field": "bytes"
  26. }
  27. },
  28. "geo_src_dc": {
  29. "cardinality": {
  30. "field": "geo.src"
  31. }
  32. },
  33. "geo_dest_dc": {
  34. "cardinality": {
  35. "field": "geo.dest"
  36. }
  37. },
  38. "responses_total": {
  39. "value_count": {
  40. "field": "timestamp"
  41. }
  42. },
  43. "success": {
  44. "filter": {
  45. "term": {
  46. "response": "200"
  47. }
  48. }
  49. },
  50. "error404": {
  51. "filter": {
  52. "term": {
  53. "response": "404"
  54. }
  55. }
  56. },
  57. "error503": {
  58. "filter": {
  59. "term": {
  60. "response": "503"
  61. }
  62. }
  63. },
  64. "malicious_client_ip": {
  65. "inference": {
  66. "model_id": "malicious_clients_model",
  67. "buckets_path": {
  68. "response_count": "responses_total",
  69. "url_dc": "url_dc",
  70. "bytes_sum": "bytes_sum",
  71. "geo_src_dc": "geo_src_dc",
  72. "geo_dest_dc": "geo_dest_dc",
  73. "success": "success._count",
  74. "error404": "error404._count",
  75. "error503": "error503._count"
  76. }
  77. }
  78. }
  79. }
  80. }
  81. },
  82. )
  83. print(resp)

Ruby

  1. response = client.search(
  2. index: 'kibana_sample_data_logs',
  3. body: {
  4. size: 0,
  5. aggregations: {
  6. client_ip: {
  7. composite: {
  8. sources: [
  9. {
  10. client_ip: {
  11. terms: {
  12. field: 'clientip'
  13. }
  14. }
  15. }
  16. ]
  17. },
  18. aggregations: {
  19. url_dc: {
  20. cardinality: {
  21. field: 'url.keyword'
  22. }
  23. },
  24. bytes_sum: {
  25. sum: {
  26. field: 'bytes'
  27. }
  28. },
  29. geo_src_dc: {
  30. cardinality: {
  31. field: 'geo.src'
  32. }
  33. },
  34. geo_dest_dc: {
  35. cardinality: {
  36. field: 'geo.dest'
  37. }
  38. },
  39. responses_total: {
  40. value_count: {
  41. field: 'timestamp'
  42. }
  43. },
  44. success: {
  45. filter: {
  46. term: {
  47. response: '200'
  48. }
  49. }
  50. },
  51. "error404": {
  52. filter: {
  53. term: {
  54. response: '404'
  55. }
  56. }
  57. },
  58. "error503": {
  59. filter: {
  60. term: {
  61. response: '503'
  62. }
  63. }
  64. },
  65. malicious_client_ip: {
  66. inference: {
  67. model_id: 'malicious_clients_model',
  68. buckets_path: {
  69. response_count: 'responses_total',
  70. url_dc: 'url_dc',
  71. bytes_sum: 'bytes_sum',
  72. geo_src_dc: 'geo_src_dc',
  73. geo_dest_dc: 'geo_dest_dc',
  74. success: 'success._count',
  75. "error404": 'error404._count',
  76. "error503": 'error503._count'
  77. }
  78. }
  79. }
  80. }
  81. }
  82. }
  83. }
  84. )
  85. puts response

Js

  1. const response = await client.search({
  2. index: "kibana_sample_data_logs",
  3. size: 0,
  4. aggs: {
  5. client_ip: {
  6. composite: {
  7. sources: [
  8. {
  9. client_ip: {
  10. terms: {
  11. field: "clientip",
  12. },
  13. },
  14. },
  15. ],
  16. },
  17. aggs: {
  18. url_dc: {
  19. cardinality: {
  20. field: "url.keyword",
  21. },
  22. },
  23. bytes_sum: {
  24. sum: {
  25. field: "bytes",
  26. },
  27. },
  28. geo_src_dc: {
  29. cardinality: {
  30. field: "geo.src",
  31. },
  32. },
  33. geo_dest_dc: {
  34. cardinality: {
  35. field: "geo.dest",
  36. },
  37. },
  38. responses_total: {
  39. value_count: {
  40. field: "timestamp",
  41. },
  42. },
  43. success: {
  44. filter: {
  45. term: {
  46. response: "200",
  47. },
  48. },
  49. },
  50. error404: {
  51. filter: {
  52. term: {
  53. response: "404",
  54. },
  55. },
  56. },
  57. error503: {
  58. filter: {
  59. term: {
  60. response: "503",
  61. },
  62. },
  63. },
  64. malicious_client_ip: {
  65. inference: {
  66. model_id: "malicious_clients_model",
  67. buckets_path: {
  68. response_count: "responses_total",
  69. url_dc: "url_dc",
  70. bytes_sum: "bytes_sum",
  71. geo_src_dc: "geo_src_dc",
  72. geo_dest_dc: "geo_dest_dc",
  73. success: "success._count",
  74. error404: "error404._count",
  75. error503: "error503._count",
  76. },
  77. },
  78. },
  79. },
  80. },
  81. },
  82. });
  83. console.log(response);

コンソール

  1. GET kibana_sample_data_logs/_search
  2. {
  3. "size": 0,
  4. "aggs": {
  5. "client_ip": {
  6. "composite": {
  7. "sources": [
  8. {
  9. "client_ip": {
  10. "terms": {
  11. "field": "clientip"
  12. }
  13. }
  14. }
  15. ]
  16. },
  17. "aggs": {
  18. "url_dc": {
  19. "cardinality": {
  20. "field": "url.keyword"
  21. }
  22. },
  23. "bytes_sum": {
  24. "sum": {
  25. "field": "bytes"
  26. }
  27. },
  28. "geo_src_dc": {
  29. "cardinality": {
  30. "field": "geo.src"
  31. }
  32. },
  33. "geo_dest_dc": {
  34. "cardinality": {
  35. "field": "geo.dest"
  36. }
  37. },
  38. "responses_total": {
  39. "value_count": {
  40. "field": "timestamp"
  41. }
  42. },
  43. "success": {
  44. "filter": {
  45. "term": {
  46. "response": "200"
  47. }
  48. }
  49. },
  50. "error404": {
  51. "filter": {
  52. "term": {
  53. "response": "404"
  54. }
  55. }
  56. },
  57. "error503": {
  58. "filter": {
  59. "term": {
  60. "response": "503"
  61. }
  62. }
  63. },
  64. "malicious_client_ip": {
  65. "inference": {
  66. "model_id": "malicious_clients_model",
  67. "buckets_path": {
  68. "response_count": "responses_total",
  69. "url_dc": "url_dc",
  70. "bytes_sum": "bytes_sum",
  71. "geo_src_dc": "geo_src_dc",
  72. "geo_dest_dc": "geo_dest_dc",
  73. "success": "success._count",
  74. "error404": "error404._count",
  75. "error503": "error503._count"
  76. }
  77. }
  78. }
  79. }
  80. }
  81. }
  82. }
client_ip によってデータを集約する複合バケット集約。
一連のメトリックおよびバケットのサブ集約。
トレーニング済みモデルを指定し、集約名をモデルの入力フィールドにマップする推論バケット集約。