diff --git a/ANALYSIS_REPORT.md b/ANALYSIS_REPORT.md index 51b9c74..594edec 100644 --- a/ANALYSIS_REPORT.md +++ b/ANALYSIS_REPORT.md @@ -9,11 +9,12 @@ ### 1.1 운영 활력 지수 (AVI, Activity Vitality Index) 프로젝트가 현재 얼마나 '살아서 숨 쉬고 있는가'를 나타내는 생존 지수입니다. -* **산출 공식**: $AVI = exp(-\lambda \times days) \times Quality \times 100$ +* **산출 공식**: $AVI = exp(-\lambda \times days) \times Quality \times ECV \times 100$ * **핵심 데이터**: * **정체 일수(days)**: 마지막 유의미한 파일 업데이트 이후 경과 시간. - * **감쇄 계수($\lambda$)**: 자산 규모(파일 수)가 클수록, 소속 부서의 방치율이 높을수록 커지며 점수를 더 빠르게 하락시킵니다. - * **활동 품질(Quality)**: 단순 시스템 로그(단순 접속, 설정 변경)는 낮게 평가하고, 실질적인 파일 증분 활동에 가점을 부여합니다. + * **감쇄 계수($\lambda$)**: 기본 $0.04$에서 시작하여, 자산 규모(최대 $+0.04$)와 부서 정체율(최대 $+0.03$)을 동적으로 결합합니다. + * **활동 품질(Quality)**: 파일 증분 활동($1.0$), 구조적 관리($0.7$), 단순 행정 로그($0.4$)로 차등 배점합니다. + * **존재 신뢰도(ECV)**: 파일 수 $0$개($0.05$), $10$개 미만($0.4$) 등 유령 프로젝트에 패널티를 부여합니다. * **의미**: 100%에 가까울수록 실시간 가동 상태이며, 0%에 가까울수록 데이터 노후화가 완료된 '사망' 상태를 뜻합니다. ### 1.2 자산 가치 기여도 (VCI, Value Contribution Index) @@ -22,15 +23,21 @@ * **산출 공식**: $VCI = (AVI - 70.0) \times (\frac{Files}{200} + 0.5)$ * **핵심 로직**: * **건강 기준선(70.0%)**: 시스템 자산 가치를 유지하기 위한 최소 마지노선(Replacement Level)입니다. - * **규모 가중치**: 파일 수가 많은 대형 프로젝트일수록 동일한 방치 상황에서 시스템에 주는 충격(음수값)이 기하급수적으로 커집니다. + * **규모 가중치**: 파일 $200$개를 $1.0$ 가중치 기준으로 삼아, 대형 프로젝트일수록 시스템에 주는 충격을 기하급수적으로 반영합니다. * **의미**: 양수(+)는 가치 창출, 음수(-)는 시스템 기회비용을 갉아먹는 '가치 파괴' 상태임을 나타냅니다. ### 1.3 업무 집중도 (Job Focus) 단순 관리 행위를 제외하고, 실제 성과물(파일)을 생산하는 데 얼마나 몰입했는지를 판별합니다. -* **산출 공식**: $Job Focus = \frac{\text{최근 30회 중 실질 파일 변동 발생 횟수}}{\text{전체 데이터 수집 횟수}} \times 100$ +* **산출 공식**: $Job Focus = \frac{\text{최근 히스토리 중 실제 파일 변동 발생 횟수}}{\text{전체 데이터 수집 횟수}} \times 100$ * **의미**: 로그만 남기는 '보여주기식 활동'을 필터링하여 운영의 진정성을 확인합니다. +### 1.4 운영 일관성 지수 (OCI, Operational Consistency Index) +프로젝트 관리의 '리듬'과 '성실도'를 측정하는 지표입니다. + +* **산출 공식**: 최근 30일 데이터를 4개 주차로 분할하여 활동 여부 분석 (주차별 성실도 70% + 활동 밀도 30%) +* **의미**: 특정 시점에 몰아치기식 작업을 하는 프로젝트보다, 매주 꾸준히 관리되는 프로젝트에 더 높은 신뢰 점수를 부여합니다. + --- ## 2. 등급 체계 및 관리 가이드 (Grade System) @@ -38,19 +45,17 @@ ### 2.1 VCI 등급 (프로젝트 위상) | 등급 (Grade) | 점수 기준 | 운영 의미 및 관리 전략 | | :--- | :--- | :--- | -| **Masterpiece** | +10.0 이상 | **핵심 자산 (MVP)**: 시스템 가치를 견인하는 최우량 프로젝트 | -| **Blue Chip** | +2.0 ~ +10.0 | **우량 자산 (주전)**: 꾸준한 활력으로 가치를 창출하는 핵심군 | -| **Steady** | -2.0 ~ +2.0 | **현상 유지 (보결)**: 표준 수준의 운영을 유지 중인 안정군 | -| **Underperform** | -10.0 ~ -2.0 | **저성과 (마이너)**: 규모 대비 활력이 부족하여 리소스 투입 필요 | -| **Liability** | -10.0 이하 | **가치 파괴 (방출)**: 시스템 가치를 훼손 중인 좀비 프로젝트. 타절 검토 시급 | +| **Masterpiece** | +10.0 이상 | **최우량 자산**: 시스템 가치를 견인하는 핵심 프로젝트 | +| **Blue Chip** | +2.0 ~ +10.0 | **우량 자산**: 꾸준한 활력으로 가치를 창출하는 핵심군 | +| **Steady** | -2.0 ~ +2.0 | **안정 자산**: 표준 수준의 운영을 유지 중인 현상 유지군 | +| **Underperform** | -10.0 ~ -2.0 | **저성과 자산**: 규모 대비 활력이 부족하여 가치 하락 중인 그룹 | +| **Liability** | -10.0 이하 | **고위험 자산**: 시스템 가치를 훼손 중인 방치 프로젝트. 즉시 조치 필요 | -### 2.2 상태 예보 (AI Forecast) -최근 활동의 **가속도(Acceleration)**와 **관성(Momentum)**을 AI가 분석한 14일 뒤 전망입니다. - -* **성장 가속 (Bullish)**: 활동 에너지가 증가 추세이며 가치가 오를 전망. -* **안정 유지 (Neutral)**: 현재의 안정적인 운영 리듬을 지속할 전망. -* **활력 저하 (Bearish)**: 정체 징후 포착. 단기 내 가동률 하락 예상. -* **중단 위기 (Warning)**: 급격한 활동 저하로 인한 자산 소멸 위험 노출. +### 2.2 운영 일관성 (OCI) 판정 +* **정기적 (80%↑)**: 주 단위의 정기적 관리가 완벽히 이뤄지는 최우량 관리 상태. +* **안정적 (50~80%)**: 간헐적 정체는 있으나 전반적인 관리 리듬을 유지하는 상태. +* **간헐적 (20~50%)**: 관리 활동이 불규칙하며, 필요에 의한 일회성 작업 중심인 상태. +* **불규칙 (20%↓)**: 장기 정체 중이거나 관리의 영속성을 확인하기 어려운 위험 상태. --- @@ -61,7 +66,7 @@ * **Velocity**: 파일 수의 변화 속도 계산. * **Acceleration**: 활동의 가속/감속 여부 판별. * **Stagnation**: 마지막 활동 이후의 공백 기간 측정. -3. **AI 시뮬레이션**: 추출된 피처를 AAS(AI 위험 적응형 모델)에 입력하여 개별 프로젝트만의 **'위험 곡선'**을 생성합니다. +3. **AI 시뮬레이션**: 추출된 피처를 AI 위험 적응형 모델 (AAS)에 입력하여 개별 프로젝트만의 **'위험 곡선'**을 생성합니다. 4. **최종 판정**: AVI와 VCI를 결합하여 리더보드에 등급과 관리 가이드라인을 송출합니다. --- diff --git a/__pycache__/analysis_service.cpython-312.pyc b/__pycache__/analysis_service.cpython-312.pyc index df75f8a..d34751f 100644 Binary files a/__pycache__/analysis_service.cpython-312.pyc and b/__pycache__/analysis_service.cpython-312.pyc differ diff --git a/analysis_service.py b/analysis_service.py index 30ba1ef..2f8f1f0 100644 --- a/analysis_service.py +++ b/analysis_service.py @@ -1,13 +1,51 @@ import re import math import statistics -from datetime import datetime +from datetime import datetime, timedelta from sql_queries import DashboardQueries from prediction_service import SOIPredictionService class AnalysisService: """프로젝트 통계 및 활동성 분석 전문 서비스""" + @staticmethod + def calculate_operational_consistency(history_rows, days_stagnant): + """운영 일관성 지수(OCI) 산출 로직 (장기 정체 패널티 포함) + 최근 30일간 활동 리듬 분석 + 현재 방치 기간에 따른 강력한 감쇄 + """ + if not history_rows or len(history_rows) < 2: + return 0.0 + + # 1. 최근 30일 이력 기반 Base Score 산출 + now = datetime.now().date() + recent_30 = [h for h in history_rows if (now - h['crawl_date']).days <= 30] + + # 주차별 활동 여부 (4주) + weeks_active = [False, False, False, False] + for h in recent_30: + days_ago = (now - h['crawl_date']).days + week_idx = min(3, days_ago // 7) + weeks_active[week_idx] = True + + base_consistency = (sum(weeks_active) / 4) * 70 + + # 활동 밀도 (변화 발생일 비율) + effort_days = 0 + for i in range(1, len(recent_30)): + if recent_30[i]['file_count'] != recent_30[i-1]['file_count']: + effort_days += 1 + + density_score = (effort_days / max(1, len(recent_30))) * 30 + base_oci = base_consistency + density_score + + # 2. [핵심] 장기 정체 패널티 적용 + # 방치일이 100일 이상이면 OCI는 0점으로 수렴 (성실도 무효화) + stagnation_factor = max(0, (100 - days_stagnant) / 100.0) + + final_oci = base_oci * stagnation_factor + + return round(final_oci, 1) + @staticmethod def calculate_activity_status(target_date_dt, log, file_count): """개별 프로젝트의 활동 상태 및 방치일 산출""" @@ -59,7 +97,7 @@ class AnalysisService: @staticmethod def get_p_zsr_analysis_logic(cursor): - """절대적 방치 실태 고발 및 AI 위험 적응형(AAS) 분석 로직""" + """절대적 방치 실태 고발 및 운영 일관성(OCI) 분석 로직""" cursor.execute(DashboardQueries.GET_LAST_CRAWL_DATE) res_date = cursor.fetchone() if not res_date or not res_date['last_date']: @@ -77,31 +115,12 @@ class AnalysisService: if not projects: return [] - # [Step 1] AI 전처리: 부서별 평균 방치일 계산 (조직적 위험도 산출용) - dept_stats = {} - for p in projects: - log = p['recent_log'] - days = 14 # 기본값 - if log and log != "데이터 없음": - match = re.search(r'(\d{4})\.(\d{2})\.(\d{2})', log) - if match: - log_date = datetime.strptime(match.group(0), "%Y.%m.%d").date() - days = (last_date - log_date).days - - dept = p['department'] or "미분류" - if dept not in dept_stats: dept_stats[dept] = [] - dept_stats[dept].append(days) - - dept_avg_risk = {d: statistics.mean(days_list) for d, days_list in dept_stats.items()} - - # [Step 2] AI 위험 적응형 SOI 산출 (AAS 모델) results = [] total_soi = 0 for p in projects: file_count = int(p['file_count']) if p['file_count'] else 0 log = p['recent_log'] - dept = p['department'] or "미분류" # 방치일 계산 days_stagnant = 14 @@ -114,52 +133,33 @@ class AnalysisService: is_auto_delete = log and "폴더자동삭제" in log.replace(" ", "") # AI-Hazard 추론 로직 (Dynamic Lambda) - # 1. 자산 규모 리스크 (파일이 많을수록 방치 시 가치 하락 가속) scale_impact = min(0.04, math.log10(file_count + 1) * 0.008) if file_count > 0 else 0 + ai_lambda = 0.04 + scale_impact - # 2. 조직적 전염 리스크 (부서 전체가 방치 중이면 패널티 부여) - dept_risk_days = dept_avg_risk.get(dept, 14) - env_impact = min(0.03, (dept_risk_days / 30) * 0.01) - - # 최종 AI 위험 계수 산출 (기본 0.04에서 변동) - ai_lambda = 0.04 + scale_impact + env_impact - - # 지수 감쇄 적용 (AAS Score) + # 지수 감쇄 적용 soi_score = math.exp(-ai_lambda * days_stagnant) * 100 - # [AI 데이터 진정성 검증 로직 1 - ECV 패널티 (존재론적)] + # ECV 패널티 existence_confidence = 1.0 - if file_count == 0: - existence_confidence = 0.05 - elif file_count < 10: - existence_confidence = 0.4 + if file_count == 0: existence_confidence = 0.05 + elif file_count < 10: existence_confidence = 0.4 - # [AI 데이터 진정성 검증 로직 2 - Log Quality Scoring (활동의 질)] + # Log Quality Scoring log_quality_factor = 1.0 if log and log != "데이터 없음": - # 성과 중심 (High) - if any(k in log for k in ["업로드", "수정", "등록", "변환", "파일", "업데이트"]): - log_quality_factor = 1.0 - # 구조 관리 (Mid) - elif any(k in log for k in ["폴더", "생성", "삭제", "이동"]): - log_quality_factor = 0.7 - # 단순 행정/설정 (Low) - elif any(k in log for k in ["참가자", "권한", "추가", "변경", "메일"]): - log_quality_factor = 0.4 - else: - log_quality_factor = 0.6 # 기타 일반 로그 + if any(k in log for k in ["업로드", "수정", "등록", "변환", "파일", "업데이트"]): log_quality_factor = 1.0 + elif any(k in log for k in ["폴더", "생성", "삭제", "이동"]): log_quality_factor = 0.7 + elif any(k in log for k in ["참가자", "권한", "추가", "변경", "메일"]): log_quality_factor = 0.4 + else: log_quality_factor = 0.6 - # 최종 점수 산출 (AAS * ECV * LogQuality) soi_score = soi_score * existence_confidence * log_quality_factor - - if is_auto_delete: - soi_score = 0.1 + if is_auto_delete: soi_score = 0.1 - # [AI 미래 예측 및 실무 투입 에너지 분석] + # [운영 일관성 분석 (OCI)] history_rows = SOIPredictionService.get_historical_soi(cursor, p['project_id']) - predicted_soi = SOIPredictionService.predict_future_soi(soi_score, history_rows, days_ahead=14) + oci_score = AnalysisService.calculate_operational_consistency(history_rows, days_stagnant) - # 실무 투입 에너지 계산 (최근 30개 히스토리 기준 파일 변화일수) + # 실무 투입 에너지 계산 effort_days = 0 if len(history_rows) > 1: for i in range(1, len(history_rows)): @@ -167,28 +167,26 @@ class AnalysisService: effort_days += 1 work_effort_rate = round((effort_days / max(1, len(history_rows))) * 100, 1) - total_soi += soi_score - # [최종 세이버메트릭스 보정: P-WAR+ (Adjusted Score)] - # 절대 기준선(Replacement Level): 70.0% (이 이하는 자산 가치 파괴로 간주) + # VCI 산출 REPLACEMENT_LEVEL = 70.0 - asset_weight = (file_count / 200.0) + 0.5 # 파일 100개당 0.5배 가중 (최소 0.5배) + asset_weight = (file_count / 200.0) + 0.5 p_war_score = (soi_score - REPLACEMENT_LEVEL) * asset_weight results.append({ "project_nm": p['short_nm'] or p['project_nm'], "file_count": file_count, "days_stagnant": days_stagnant, - "risk_count": round(p_war_score, 2), # P-WAR+ 절대 기여도 점수 (평균의 함정 극복용) + "risk_count": round(p_war_score, 2), "p_war": round(soi_score, 1), - "predicted_soi": predicted_soi, + "oci_score": oci_score, # 운영 일관성 지수 추가 "is_auto_delete": is_auto_delete, "master": p['master'], "dept": p['department'], "ai_lambda": round(ai_lambda, 4), "log_quality": log_quality_factor, - "work_effort": work_effort_rate, # 신규 지표 추가 + "work_effort": work_effort_rate, "avg_info": { "avg_files": 0, "avg_stagnant": 0, diff --git a/js/analysis.js b/js/analysis.js index f5ad012..2f4ecf0 100644 --- a/js/analysis.js +++ b/js/analysis.js @@ -1,6 +1,7 @@ /** * Project Master Analysis JS * AVI (Activity Vitality Index) & VCI (Value Contribution Index) 분석 엔진 + * OCI (Operational Consistency Index) 통합 버전 */ // Chart.js 플러그인 전역 등록 @@ -33,19 +34,18 @@ async function loadProjectAnalysisData() { } function getStatusInfo(avi, isAutoDelete) { - if (isAutoDelete || avi < 10) return { label: '중단/방치', class: 'badge-system', key: 'dead' }; + if (isAutoDelete || avi < 10) return { label: '사망', class: 'badge-system', key: 'dead' }; if (avi < 30) return { label: '위험 노출', class: 'badge-danger', key: 'danger' }; if (avi < 70) return { label: '관리 주의', class: 'badge-warning', key: 'warning' }; return { label: '정상 운영', class: 'badge-active', key: 'active' }; } -// VCI 등급 판정 로직 (Sabermetrics WAR 등급 기준 응용) function getVciGrade(vci) { - if (vci >= 10) return { label: 'Masterpiece', class: 'grade-mvp', desc: '시스템 가치를 견인하는 핵심 자산 (MVP급)' }; - if (vci >= 2) return { label: 'Blue Chip', class: 'grade-allstar', desc: '꾸준한 활력의 우량 자산 (주전급)' }; - if (vci >= -2) return { label: 'Steady', class: 'grade-starter', desc: '표준 수준의 현상 유지 (보결급)' }; - if (vci >= -10) return { label: 'Underperform', class: 'grade-bench', desc: '운영 미비로 인한 가치 하락 (마이너급)' }; - return { label: 'Liability', class: 'grade-out', desc: '가치를 훼손 중인 방치 자산 (방출급)' }; + if (vci >= 10) return { label: 'Masterpiece', class: 'grade-mvp', desc: '시스템 가치를 견인하는 최우량 핵심 자산' }; + if (vci >= 2) return { label: 'Blue Chip', class: 'grade-allstar', desc: '꾸준한 활력으로 가치를 창출하는 우량 자산' }; + if (vci >= -2) return { label: 'Steady', class: 'grade-starter', desc: '표준 수준의 운영을 유지 중인 안정 자산' }; + if (vci >= -10) return { label: 'Underperform', class: 'grade-bench', desc: '규모 대비 활력 부족으로 가치가 하락 중인 자산' }; + return { label: 'Liability', class: 'grade-out', desc: '가치를 훼손 중인 고위험 방치 자산' }; } function renderValueCharts(data) { @@ -65,7 +65,7 @@ function renderValueCharts(data) { window.myStatusChart = new Chart(statusCtx, { type: 'doughnut', data: { - labels: ['정상 운영', '관리 주의', '위험 노출', '중단/방치'], + labels: ['정상 운영', '관리 주의', '위험 노출', '사망'], datasets: [{ data: [stats.active.length, stats.warning.length, stats.danger.length, stats.dead.length], backgroundColor: ['#1E5149', '#22c55e', '#f59e0b', '#ef4444'], @@ -84,20 +84,19 @@ function renderValueCharts(data) { onClick: (e, elements) => { if (elements.length > 0) { const idx = elements[0].index; - openProjectListModal(['정상 운영', '관리 주의', '위험 노출', '중단/방치'][idx], stats[['active', 'warning', 'danger', 'dead'][idx]]); + openProjectListModal(['정상 운영', '관리 주의', '위험 노출', '사망'][idx], stats[['active', 'warning', 'danger', 'dead'][idx]]); } } } }); } catch (err) { console.error("도넛 차트 에러:", err); } - // 2. 전략적 자산 매트릭스 (Scatter) + // 2. 전략적 자산 매트릭스 (Scatter) - 정밀 복구 try { const sortedByAVI = [...data].sort((a, b) => b.p_war - a.p_war); const top5Ids = sortedByAVI.slice(0, 5).map(p => p.project_nm); const bottom5Ids = sortedByAVI.slice(-5).map(p => p.project_nm); const largeProjects = data.filter(p => p.file_count > 450).map(p => p.project_nm); - const vipProjectNames = new Set([...top5Ids, ...bottom5Ids, ...largeProjects]); const scatterData = data.map(p => { @@ -140,9 +139,8 @@ function renderValueCharts(data) { scales: { x: { type: 'linear', min: 0, max: 500, - title: { display: true, text: '파일 수 (Files)', font: { size: 11, weight: '700' } }, - grid: { display: false }, - ticks: { stepSize: 125, callback: (v) => v >= 500 ? '500+' : v } + title: { display: true, text: '자산 규모 (파일 수)', font: { size: 11, weight: '700' } }, + grid: { display: false } }, y: { min: 0, max: 100, @@ -155,17 +153,14 @@ function renderValueCharts(data) { datalabels: { backgroundColor: 'rgba(255, 255, 255, 0.8)', borderRadius: 4, padding: 4, - align: (ctx) => (ctx.raw && ctx.raw.y > 80 ? 'bottom' : 'top'), - offset: (ctx) => (ctx.raw ? ctx.raw.radius : 5) + 2, font: { size: 10, weight: '800' }, - color: '#1e293b', formatter: (v) => v ? v.label : '', display: (ctx) => ctx.raw && ctx.raw.isVip, clip: false }, tooltip: { callbacks: { - label: (ctx) => ` [${ctx.raw.label}] 활력(AVI): ${ctx.raw.y.toFixed(1)}% | 가치 기여(VCI): ${ctx.raw.vci.toFixed(1)}` + label: (ctx) => ` [${ctx.raw.label}] AVI: ${ctx.raw.y.toFixed(1)}% | VCI: ${ctx.raw.vci.toFixed(1)}` } } } @@ -210,25 +205,47 @@ function renderVitalityLeaderboard(data) {
대상 프로젝트 없음
' : ` + body.innerHTML = `| 프로젝트명 | 부서 | 관리자 | 정체일 | 활력(AVI) |
|---|---|---|---|---|
| ${p.project_nm} | ${p.dept || '-'} | ${p.master || '-'} | ${p.days_stagnant}일 | ${p.p_war.toFixed(1)}% |
| 프로젝트명 | 관리자 | 정체일 | AVI | |
| ${p.project_nm} | ${p.master || '-'} | ${p.days_stagnant}일 | ${p.p_war.toFixed(1)}% |
운영 표준(AVI 70%) 대비 자산 가치 기여도에 따른 프로젝트 위상 분류입니다.
| 점수 (VCI) | 등급 | 운영 의미 |
|---|---|---|
| +10.0↑ | Masterpiece | 시스템 가치를 견인하는 핵심 자산 (MVP급) |
| +2.0 ~ +10.0 | Blue Chip | 꾸준한 활력의 우량 자산 (주전급) |
| -2.0 ~ +2.0 | Steady | 표준 수준의 현상 유지 (보결급) |
| -10.0 ~ -2.0 | Underperform | 운영 미비로 인한 가치 하락 (마이너급) |
| -10.0↓ | Liability | 가치를 훼손 중인 방치 자산 (방출급) |
| +10.0↑ | Masterpiece | 시스템 가치를 견인하는 최우량 핵심 자산 |
| +2.0 ~ +10.0 | Blue Chip | 꾸준한 활력으로 가치를 창출하는 우량 자산 |
| -2.0 ~ +2.0 | Steady | 표준 수준의 운영을 유지 중인 안정 자산 |
| -10.0 ~ -2.0 | Underperform | 규모 대비 활력 부족으로 가치 하락 중인 자산 |
| -10.0↓ | Liability | 가치를 훼손 중인 고위험 방치 자산 |
미래 예측이 아닌, 최근 30일간의 활동 리듬과 관리의 규칙성을 분석하여 성실도를 점수화합니다.
+| 분석 결과 | 일관성 등급 | 관리 신뢰도 |
|---|---|---|
| 80%↑ | 매우 우수 | 주 단위의 정기적 관리가 완벽히 이뤄짐 |
| 50~80% | 양호 | 간헐적 정체는 있으나 꾸준히 관리됨 |
| 20~50% | 주의 | 돌발적 활동 위주, 관리의 리듬이 깨짐 |
| 20%↓ | 매우 불량 | 장기 정체 중이거나 관리 의지 확인 불가 |
단순 관리 로그를 제외한 실질적인 산출물 변화의 밀도입니다.
+최근 수집 로그 중 단순 행정 로그를 제외하고 실질적인 성과물(파일) 변동이 포착된 비율입니다.
| 비율 (%) | 등급 | 활동 성격 |
|---|
단순한 현재 점수 나열이 아닌, 최근 활동의 가속도(Acceleration)와 변화 패턴을 AI가 분석하여 미래의 활력 지수(AVI)를 예보합니다.
-| 분석 결과 | 상태 등급 | 관리 가이드라인 |
|---|---|---|
| AVI 상승↑ | 성장 가속 | 활동 모멘텀이 상승 중인 우수 자산 |
| AVI 유지 | 안정 유지 | 현재의 리듬을 유지하는 표준 운영 상태 |
| AVI 하락↓ | 활력 저하 | 정체 징후 포착, 관리 리소스 투입 검토 |
| AVI 10%↓ | 중단 위기 | 단기 내 완전 방치 및 가치 소멸 위험 |
규모를 감지하여, 대형 프로젝트 정체 시 데이터 가치 하락 속도를 가속(Acceleration)시킵니다.
소속 부서의 전반적인 활력이 낮을 경우, 개별 위험 지수를 상향 조정하여 시스템적 붕괴를 예보합니다.
+최근 활동의 연속성을 분석하여, 단기 정체 시에도 과거의 운영 모멘텀을 반영하여 지수를 보정합니다.
운영 표준(AVI 70%) 대비 파일 보존율 및 미래 가치 기여 리더보드
+운영 표준(AVI 70%) 대비 운영 활력 및 VCI 기여 리더보드