trend-analysis について
trend-analysisは、過去のインシデントデータを分析するServiceNow ITSMスキルです。キャパシティ計画や調査に向けて、件数、カテゴリ、優先度、暦のパターン、異常を分析し、変更や問題との関連も確認します。
主な機能
- 01インシデント件数の推移追跡
- 02カテゴリ・優先度分布の比較
- 03曜日・季節パターンの把握
- 04先行指標と相関の分析
- 05統計的な異常の検出
活用シーン
- 01週次インシデント傾向レポートの作成
- 02過去の件数に基づく要員需要の推定
- 03件数急増やカテゴリ変化の調査
MCP 対応
SN-Query-Tableで履歴データを取得し、SN-Execute-Background-Scriptで複雑な集計を行います。SN-Natural-Language-Searchも記載され、REST APIによる代替方法も紹介しています。
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ happy-technologies-llc/ happy-platform-skills --skill trend-analysisインストール後、Claude Code で/trend-analysisを入力して読み込まれたか確認します。
詳細
トレンド分析
概要
このスキルは、ServiceNow ITSM データの包括的なトレンド分析を提供します。次のことができます。
- インシデント件数の経時的なトレンドを分析します(日次、週次、月次、四半期ごと)
- カテゴリーと優先度の分布の変化を特定します
- 季節性および周期性のパターンを検出します
- キャパシティ計画に役立つ予測指標を把握します
- リソース配分に向けた実行可能なインサイトを生成します
使用する場面: キャパシティ計画、リソース予測、システム上の問題の特定、トレンドレポートの作成、または調査が必要な異常の検出に使用します。
前提条件
- ロール:
report_admin、itil、またはanalytics_admin - アクセス権: インシデント、問題、および関連テーブルへの読み取りアクセス
- 知識: 基本的な統計知識と組織のパターンに関する理解
- データ: 過去 90 日分以上のデータを推奨します。季節性の分析には 12 か月分が理想的です
手順
ステップ 1:ベースライン指標を設定する
過去のデータをクエリし、比較用のベースラインを設定します。
MCP(Claude Code/Desktop)を使用する場合:
Tool: SN-Query-Table
Parameters:
table_name: incident
query: sys_created_onONLast 90 days@javascript:gs.daysAgoStart(90)@javascript:gs.daysAgoEnd(0)
fields: sys_id,number,sys_created_on,priority,category,state,assignment_group
limit: 5000
REST API を使用する場合:
GET /api/now/table/incident?sysparm_query=sys_created_onONLast 90 days@javascript:gs.daysAgoStart(90)@javascript:gs.daysAgoEnd(0)&sysparm_fields=sys_id,number,sys_created_on,priority,category,state,assignment_group&sysparm_limit=5000
ステップ 2:日次の件数トレンドを分析する
日ごとのインシデント作成パターンを追跡します。
日次の内訳を取得するクエリ(GlideAggregate を使用):
Tool: SN-Execute-Background-Script
Parameters:
script: |
var ga = new GlideAggregate('incident');
ga.addQuery('sys_created_on', '>=', gs.daysAgo(30));
ga.addAggregate('COUNT');
ga.groupBy('sys_created_on');
ga.orderBy('sys_created_on');
ga.query();
var dailyCounts = [];
while (ga.next()) {
var dateStr = ga.getValue('sys_created_on').substring(0, 10);
dailyCounts.push({
date: dateStr,
count: parseInt(ga.getAggregate('COUNT'))
});
}
gs.info('Daily Volume: ' + JSON.stringify(dailyCounts));
description: Aggregate daily incident counts
手動での計算(GlideAggregate を使用しない場合): 特定の日付範囲のインシデントをクエリします。
Tool: SN-Query-Table
Parameters:
table_name: incident
query: sys_created_onON2024-01-15@javascript:gs.dateGenerate('2024-01-15','00:00:00')@javascript:gs.dateGenerate('2024-01-15','23:59:59')
fields: sys_id
limit: 500
ステップ 3:週ごとの件数を比較する
週ごとの比較を行い、トレンドを特定します。
今週:
Tool: SN-Query-Table
Parameters:
table_name: incident
query: sys_created_onONLast 7 days@javascript:gs.daysAgoStart(7)@javascript:gs.daysAgoEnd(0)
fields: sys_id,priority,category
limit: 1000
先週:
Tool: SN-Query-Table
Parameters:
table_name: incident
query: sys_created_onONLast 7 days@javascript:gs.daysAgoStart(14)@javascript:gs.daysAgoEnd(7)
fields: sys_id,priority,category
limit: 1000
週ごとの比較分析:
| 週 | 件数 | 変化 | 変化率 |
|---|---|---|---|
| 今週 | 145 | +12 | +9.0% |
| 先週 | 133 | -5 | -3.6% |
| 2 週間前 | 138 | +8 | +6.2% |
| 3 週間前 | 130 | - | ベースライン |
ステップ 4:カテゴリー分布を分析する
インシデントカテゴリーが時間とともにどのように変化するかを追跡します。
カテゴリー分布を取得するクエリ:
Tool: SN-Query-Table
Parameters:
table_name: incident
query: sys_created_onONLast 30 days@javascript:gs.daysAgoStart(30)@javascript:gs.daysAgoEnd(0)
fields: sys_id,category
limit: 2000
結果を処理して分布を作成します。
Category Distribution (Last 30 Days):
| Category | Count | % of Total | Prev Month % | Change |
|----------|-------|------------|--------------|--------|
| Software | 245 | 32% | 28% | +4% |
| Network | 189 | 25% | 30% | -5% |
| Hardware | 152 | 20% | 18% | +2% |
| Email | 98 | 13% | 12% | +1% |
| Security | 76 | 10% | 12% | -2% |
ステップ 5:優先度のトレンドを分析する
優先度分布の変化を監視します。
経時的な優先度分布を取得するクエリ:
Tool: SN-Query-Table
Parameters:
table_name: incident
query: sys_created_onONLast 30 days@javascript:gs.daysAgoStart(30)@javascript:gs.daysAgoEnd(0)
fields: sys_id,priority,sys_created_on
limit: 2000
優先度の変化を示す指標:
| 指標 | 意味 | 対応 |
|---|---|---|
| P1/P2 が増加 | 重大な問題が増加しています | 根本原因を調査します |
| P3/P4 が増加 | 通常の増加、またはトリアージ上の問題です | トリアージプロセスを見直します |
| P1 は安定し、P2 が増加 | エスカレーションのしきい値が変化しています | 緊急度の基準を見直します |
ステップ 6:曜日ごとのパターンを確認する
インシデント件数が最も多い曜日を特定します。
曜日別にインシデントを取得するクエリ:
Tool: SN-Query-Table
Parameters:
table_name: incident
query: sys_created_onONLast 90 days@javascript:gs.daysAgoStart(90)@javascript:gs.daysAgoEnd(0)
fields: sys_id,sys_created_on
limit: 5000
結果を処理して曜日を抽出します。
Day of Week Analysis (90-Day Average):
| Day | Avg Volume | vs Overall Avg | Staffing Recommendation |
|-----|------------|----------------|------------------------|
| Monday | 32 | +23% | Full staff + OT |
| Tuesday | 28 | +8% | Full staff |
| Wednesday | 26 | 0% | Normal |
| Thursday | 25 | -4% | Normal |
| Friday | 24 | -8% | Normal, early close OK |
| Saturday | 8 | -69% | Weekend skeleton |
| Sunday | 7 | -73% | Weekend skeleton |
ステップ 7:時間帯ごとのパターンを確認する
要員配置を最適化するため、ピーク時間帯を特定します。
時間帯別の内訳を取得するクエリ:
Tool: SN-Execute-Background-Script
Parameters:
script: |
var ga = new GlideAggregate('incident');
ga.addQuery('sys_created_on', '>=', gs.daysAgo(30));
ga.addAggregate('COUNT');
ga.query();
// Note: For hourly analysis, use sys_created_on timestamp
// and extract hour component in processing
var total = ga.getAggregate('COUNT');
gs.info('Total incidents: ' + total);
description: Count incidents for hourly analysis
一般的な時間帯別の分布:
Hourly Volume Pattern (30-Day Analysis):
Peak Hours: 8am-11am (35% of daily volume)
Secondary Peak: 1pm-3pm (25% of daily volume)
Low Period: 6pm-6am (15% of daily volume)
Staffing Recommendation:
- Core Hours (8am-5pm): 80% of staff
- Extended Hours (5pm-8pm): 15% of staff
- Night/Weekend: 5% of staff
ステップ 8:季節性および周期性のパターンを確認する
暦上のイベントに基づく、繰り返し発生するパターンを特定します。
月次件数を前年と比較するクエリ: 各月について、次のクエリを実行します。
Tool: SN-Query-Table
Parameters:
table_name: incident
query: sys_created_onON2024-01-01@javascript:gs.dateGenerate('2024-01-01','00:00:00')@javascript:gs.dateGenerate('2024-01-31','23:59:59')
fields: sys_id
limit: 2000
一般的な季節性のパターン:
| 期間 | パターン | 考えられる原因 |
|---|---|---|
| 1 月 | +15-20% | 休暇期間中の対応遅延、新年に伴う問題 |
| 3 月/4 月 | +10% | 会計年度末、システム変更 |
| 6 月~8 月 | -10-15% | 休暇期間、活動の減少 |
| 9 月 | +20% | 学校/職場への復帰、新入社員 |
| 11 月 | +5% | 休暇前の変更 |
| 12 月 | -20% | 休暇による業務停止 |
ステップ 9:予測指標を確認する
将来のインシデント件数を示す先行指標を特定します。
変更件数との相関: 変更件数が多いと、その後インシデントが急増することがよくあります。
Tool: SN-Query-Table
Parameters:
table_name: change_request
query: sys_created_onONLast 30 days@javascript:gs.daysAgoStart(30)@javascript:gs.daysAgoEnd(0)
fields: sys_id,type,cmdb_ci
limit: 500
先行指標としての問題の作成:
Tool: SN-Query-Table
Parameters:
table_name: problem
query: sys_created_onONLast 30 days@javascript:gs.daysAgoStart(30)@javascript:gs.daysAgoEnd(0)
fields: sys_id,category,first_reported_by_task
limit: 100
監視する先行指標:
| 指標 | 相関 | 遅延時間 |
|---|---|---|
| 変更件数 | +0.65 | 1~3 日 |
| 新入社員数 | +0.45 | 1~2 週間 |
| ソフトウェアのデプロイ | +0.72 | 1~7 日 |
| インフラストラクチャのアラート | +0.80 | 0~24 時間 |
| 作成された問題レコード | +0.55 | 1~4 週間 |
ステップ 10:異常検知
調査が必要な通常とは異なるパターンを特定します。
統計的な境界値を計算する:
Rolling 30-Day Average: 26 incidents/day
Standard Deviation: 6 incidents
Upper Threshold (2σ): 38 incidents/day
Lower Threshold (2σ): 14 incidents/day
Any day outside 14-38 range = Anomaly requiring investigation
最近の異常をクエリする: 1 日あたりの件数がしきい値を超えた場合は、調査します。
Tool: SN-Query-Table
Parameters:
table_name: incident
query: sys_created_onONToday@javascript:gs.beginningOfToday()@javascript:gs.endOfToday()^ORDERBYcategory
fields: sys_id,category,short_description,cmdb_ci
limit: 100
ツールの使用方法
MCP ツールのリファレンス
| ツール | 使用するタイミング |
|---|---|
SN-Query-Table | 過去のデータをクエリするための主要なツール |
SN-Natural-Language-Search | すばやく調査するための自然言語クエリ |
SN-Execute-Background-Script | GlideAggregate を使用した複雑な集計 |
REST API のリファレンス
| エンドポイント | メソッド | 目的 |
|---|---|---|
/api/now/table/incident | GET | インシデント履歴のクエリ |
/api/now/stats/incident | GET | 統計的な集計 |
/api/now/table/change_request | GET | 変更との相関データ |
傾向分析に役立つ主なフィールド
| フィールド | 目的 |
|---|---|
| sys_created_on | インシデントの作成日時 |
| category | カテゴリー分類 |
| priority | 優先度 |
| assignment_group | 担当チーム |
| cmdb_ci | 構成アイテム |
| state | 現在の状態 |
ベストプラクティス
- タイムゾーンの統一: すべてのクエリで同じタイムゾーンを使用してください
- 統計的有意性: 信頼できるパターンを把握するには、90 日以上のデータを使用してください
- 季節性の調整: 前年の同じ期間と比較してください
- 相関分析: インシデントを変更、問題、CI に関連付けてください
- 可視化: パターンの認識にはチャートを使用してください
- アラートの自動化: 統計的な異常に対するアラートを設定してください
- 例外の記録: データに偏りを生じさせる一度限りのイベントを記録してください
トラブルシューティング
「データに予想外の急増が見られる」
原因: 重大なインシデント、システム障害、またはチケットの一括作成 解決策: 既知の重大なインシデントを除外し、そのイベントを例外として記録します
「前年比の比較が一致しない」
原因: 事業の変更、合併、または組織再編 解決策: 従業員数または範囲の変更を基準に調整し、構造上の違いを記録します
「季節的なパターンが現れない」
原因: 過去のデータが不十分(12 か月未満) 解決策: さらにデータが蓄積されるまで待ち、業界のベンチマークを代替指標として使用します
「曜日ごとのパターンに一貫性がない」
原因: 祝日、社内イベント、またはリモートワークの変更 解決策: 祝日を含む週を除外し、リモートワーク期間とオフィス勤務期間を分けて分析します
例
例 1:週次の傾向レポート
目的: 経営陣向けに週次の傾向サマリーを作成します
クエリ:
// This Week
Tool: SN-Query-Table
Parameters:
table_name: incident
query: sys_created_onONLast 7 days@javascript:gs.daysAgoStart(7)@javascript:gs.daysAgoEnd(0)
fields: sys_id,priority,category,sys_created_on
limit: 500
// Previous Week
Tool: SN-Query-Table
Parameters:
table_name: incident
query: sys_created_onONLast 7 days@javascript:gs.daysAgoStart(14)@javascript:gs.daysAgoEnd(7)
fields: sys_id,priority,category,sys_created_on
limit: 500
// Same Week Last Year (if available)
Tool: SN-Query-Table
Parameters:
table_name: incident
query: sys_created_onON2023-01-15@javascript:gs.dateGenerate('2023-01-15','00:00:00')@javascript:gs.dateGenerate('2023-01-21','23:59:59')
fields: sys_id,priority,category
limit: 500
出力レポート:
=== WEEKLY TREND REPORT ===
Week: Jan 15-21, 2024
VOLUME COMPARISON:
| Period | Volume | Change |
|--------|--------|--------|
| This Week | 152 | - |
| Last Week | 138 | +10.1% |
| Same Week Last Year | 165 | -7.9% |
| 4-Week Average | 142 | +7.0% |
TREND ASSESSMENT: Moderate Increase (within normal range)
DAILY BREAKDOWN:
| Day | Volume | vs Avg |
|-----|--------|--------|
| Mon | 35 | +17% |
| Tue | 28 | -7% |
| Wed | 25 | -17% |
| Thu | 22 | -27% |
| Fri | 24 | -20% |
| Sat | 10 | -67% |
| Sun | 8 | -73% |
Monday spike correlates with 3 changes deployed over weekend.
CATEGORY SHIFTS:
| Category | This Week | Last Week | Change |
|----------|-----------|-----------|--------|
| Software | 52 (34%) | 42 (30%) | +4% |
| Network | 38 (25%) | 42 (30%) | -5% |
| Hardware | 30 (20%) | 28 (20%) | 0% |
| Email | 18 (12%) | 14 (10%) | +2% |
| Security | 14 (9%) | 12 (9%) | 0% |
SOFTWARE TREND: +4% increase requires investigation
- 15 incidents related to new CRM deployment
- Recommend knowledge article for common CRM issues
FORECAST (Next Week):
Based on 8-week trend and scheduled changes:
Expected Volume: 145-160 incidents
Confidence: Medium (upcoming holiday may reduce volume)
例 2:キャパシティプランニングレポート
目的: 次の四半期に必要な人員を予測します
分析プロセス:
- 過去の件数(直近 12 か月):
Tool: SN-Query-Table
Parameters:
table_name: incident
query: sys_created_onONLast 365 days@javascript:gs.daysAgoStart(365)@javascript:gs.daysAgoEnd(0)
fields: sys_id,sys_created_on,priority
limit: 10000
- 月次平均を計算する:
Monthly Volume Summary:
Jan: 720 | Feb: 680 | Mar: 750
Apr: 710 | May: 695 | Jun: 620
Jul: 580 | Aug: 590 | Sep: 780
Oct: 740 | Nov: 700 | Dec: 550
Average: 676/month
Peak: September (780) - Back to school/work
Low: December (550) - Holiday period
- 次の四半期を予測する:
=== Q2 2024 CAPACITY FORECAST ===
VOLUME PROJECTION:
| Month | Projected | Confidence | Factors |
|-------|-----------|------------|---------|
| April | 720-750 | High | Fiscal year end |
| May | 700-730 | High | Normal |
| June | 630-660 | Medium | Summer start |
STAFFING REQUIREMENTS:
Current Capacity: 750 incidents/month (5 FTEs)
Incidents per FTE: 150/month
| Month | Volume | FTEs Needed | Current | Gap |
|-------|--------|-------------|---------|-----|
| April | 735 | 5.0 | 5 | 0 |
| May | 715 | 4.8 | 5 | +0.2 |
| June | 645 | 4.3 | 5 | +0.7 |
RECOMMENDATIONS:
1. April: Full staffing required, no vacations
2. May: Normal operations, 1 vacation slot OK
3. June: Good time for training, 2 vacation slots OK
RISK FACTORS:
- ERP upgrade scheduled for April 15: +20% volume risk
- New office opening in May: +50 incidents/month expected
ADJUSTED FORECAST WITH RISKS:
| Month | Base | Risk Adjusted | FTEs Needed |
|-------|------|---------------|-------------|
| April | 735 | 880 | 6.0 |
| May | 715 | 815 | 5.5 |
| June | 645 | 695 | 4.7 |
Recommendation: Hire 1 contractor for April-May to cover ERP risk
例 3:根本原因の傾向調査
目的: 今月、ソフトウェア関連のインシデントが 15% 増加した理由を調査します
ステップ 1:増加を特定する
Tool: SN-Query-Table
Parameters:
table_name: incident
query: category=Software^sys_created_onONLast 30 days@javascript:gs.daysAgoStart(30)@javascript:gs.daysAgoEnd(0)
fields: sys_id,short_description,cmdb_ci,subcategory,assignment_group,sys_created_on
limit: 500
ステップ 2:サブカテゴリー別に掘り下げる
Software Incident Breakdown:
| Subcategory | This Month | Last Month | Change |
|-------------|------------|------------|--------|
| CRM | 85 | 45 | +89% |
| Email | 42 | 48 | -12% |
| ERP | 38 | 35 | +9% |
| Office Suite | 35 | 40 | -12% |
| Other | 45 | 42 | +7% |
CRM subcategory driving entire increase!
ステップ 3:CRM インシデントを分析する
Tool: SN-Query-Table
Parameters:
table_name: incident
query: category=software^cmdb_ci.nameLIKECRM^sys_created_on>=javascript:gs.beginningOfThisMonth()
fields: sys_id,short_description,sys_created_on
limit: 100
ステップ 4:パターンを特定する
=== CRM INCIDENT TREND ANALYSIS ===
TIMELINE:
- Month start (Day 1-10): 15 incidents (normal)
- Mid-month (Day 11-20): 45 incidents (+200%)
- Month end (Day 21-30): 25 incidents (+67%)
CORRELATION:
- CRM v4.2 deployed on Day 10
- 70% of incidents reference "login" or "sync" issues
- All incidents assigned to Application Support
TOP ISSUES:
1. "Unable to sync contacts" - 32 incidents
2. "Login timeout errors" - 28 incidents
3. "Report generation failing" - 15 incidents
4. Other - 10 incidents
ROOT CAUSE:
CRM v4.2 deployment introduced authentication bug
affecting mobile sync and session timeout.
RECOMMENDATIONS:
1. IMMEDIATE: Deploy hotfix for authentication issue
2. SHORT-TERM: Create knowledge article for workaround
3. LONG-TERM: Improve deployment testing for auth changes
PREDICTED IMPACT:
After hotfix deployment, expect:
- Week 1: 50% reduction in CRM incidents
- Week 2: Return to baseline (45/month)
関連スキル
reporting/sla-analysis- SLA パフォーマンスの追跡reporting/executive-dashboard- 経営陣向け KPI の作成itsm/incident-lifecycle- インシデント管理全般itsm/problem-analysis- 根本原因の調査