[개발 공부] / GraphSAGE feature importance, 단독 랭킹보다 조합으로 읽기.md

GraphSAGE feature importance, 단독 랭킹보다 조합으로 읽기

조회

2026년 4월 23일 | 개발 공부


GraphSAGEGraph Sample and Aggregate의 약자고, 주변 이웃을 샘플링하고 집계해서 노드 표현을 만드는 그래프 신경망(GNN) 계열 모델이다. 최근 GNN 실험에서 이 모델의 입력판을 몇 번 바꿔 보다가, 나는 feature importance를 단독 랭킹처럼 읽는 습관이 생각보다 자주 사람을 헷갈리게 만든다는 걸 다시 느꼈다. 같은 degree 하나가 어떤 판에서는 제거 후보처럼 보였고, 다른 판에서는 오히려 split을 덜 흔들리게 만드는 축으로 보였기 때문이다.

예전의 나는 importance 표를 보면 일단 1위, 2위부터 봤다. 어떤 feature가 위에 있으면 "이건 남겨야 하는 신호"로 읽고, 아래로 밀리면 제거 후보로 적었다. 그런데 지금 GraphSAGE 실험처럼 structural-only, propagation residual, hybrid full, reduced core를 오가다 보면, 그 방식은 질문을 너무 빨리 닫아 버린다. 중요도의 뜻이 feature 자체에 붙어 있는 게 아니라, 옆에 어떤 축이 같이 서 있느냐에 따라 달라지기 때문이다.

1. importance 표 하나로는 질문이 너무 일찍 닫힌다

importance 표는 편하다. 숫자 하나로 기여도가 정렬돼 있으니, 마치 모델이 각 feature의 서열을 이미 알려 준 것처럼 보인다. 하지만 그 표가 말해 주는 건 보통 지금 이 입력판 안에서의 기여도다. structural 요약 5개만 올린 판에서의 1위와, propagation residual 9개가 이미 같이 들어간 hybrid 판에서의 1위는 같은 질문에 대한 답이 아니다.

이 차이를 놓치면 해석이 금방 과격해진다. 예를 들어 어떤 판에서 degree가 별로 안 중요해 보였다고 해서 곧바로 "degree는 항상 약한 feature"라고 적어 버리면, 다른 판에서 degree가 맡던 안정화 역할을 놓치게 된다. 반대로 closed_triplets가 평균 점수를 밀어 올렸다고 해서 "triad 계열이 무조건 핵심"이라고 적어도, 정작 hardest split에서는 바닥을 못 받치는 장면을 같이 보지 못한다. 결국 문제는 importance 숫자가 틀렸다는 게 아니라, 숫자가 유효한 문맥을 같이 적지 않았다는 것에 있었다.

2. 같은 degree가 다른 역할을 했던 장면

이번 실험에서 가장 재미있었던 건 degree의 역할이 입력판에 따라 뒤집힌 장면이었다. 14차원 hybrid full에서는 degree를 빼자 mean test AUC가 0.85, hardest split AUC가 0.75까지 올라갔다. 이 결과만 떼어 보면 degree는 propagation residual과 겹쳐 노이즈를 늘리는 축처럼 읽힌다. 실제로 그 순간의 내 메모도 거의 제거 후보 쪽에 가까웠다.

그런데 reduced core로 입력판을 얇게 만든 뒤 이야기가 바뀌었다. reduced+degree는 mean test AUC가 0.75로 hybrid_reduced와 같지만, hardest split AUC가 0.75로 올라가고 seed 표준편차가 0.0000으로 평평해졌다. 이번에는 degree가 성능 부스터라기보다 split stabilizer처럼 움직인 셈이다. 즉 같은 feature라도 "좋으냐 나쁘냐"보다 지금 이 판에서 무슨 일을 하느냐를 먼저 봐야 했다.

입력판 관찰된 숫자 내가 읽은 역할
hybrid full degree 제거 후 mean 0.85 / hardest 0.75 중복 가능성이 큰 축, 제거 후보
reduced+degree mean 0.75 / hardest 0.75 / std 0.0000 평균보다 바닥을 받치는 split stabilizer
reduced+closed_triplets mean 0.80 / hardest 0.50 평균을 밀어 올리지만 floor는 못 올리는 booster
hybrid_reduced mean 0.75 / gap 0.1167 가장 깔끔한 generalization 기준판

이 표를 만든 뒤에야 내 메모가 훨씬 덜 흔들렸다. degree를 한 줄로 "중요함" 또는 "불필요함"으로 고정하는 대신, 어느 입력판에서는 중복을 만들고 어느 입력판에서는 바닥을 받친다고 적을 수 있었기 때문이다. 그 차이가 생기면 다음 실험도 단순한 제거/유지 게임이 아니라, 어떤 조합을 다시 테스트해야 하는지로 이어진다.

3. 같이 놓인 축이 역할을 바꾸는 이유

내가 지금 이 장면을 해석하는 방식은 이렇다. propagation residual이 이미 local similarity와 neighborhood context를 꽤 많이 들고 있는 판에서는, raw degree가 정보량을 더하기보다 같은 쪽 신호를 한 번 더 세는 축으로 작동할 수 있다. 그래서 hybrid full에서는 degree를 제거했을 때 오히려 mean과 hardest split이 같이 올라가는 장면이 나왔다.

반대로 reduced core처럼 structural 축을 얇게 정리한 판에서는 사정이 달라진다. 이때는 degree가 아주 강한 대표 feature라기보다, 다른 구조 요약이 놓친 popularity 쪽 좌표를 다시 붙여 주는 앵커처럼 움직일 수 있다. 그래서 reduced+degree는 최고점을 더 높이지 않아도, split마다 들쑥날쑥하던 결과를 평평하게 만드는 쪽으로 읽혔다. 같은 feature가 문맥에 따라 duplicate였다가 stabilizer였다가 하는 이유가 여기에 있다.

closed_triplets도 비슷하다. reduced+closed_triplets는 mean test AUC를 0.80까지 올렸지만 hardest split은 0.50에 머물렀다. 이건 triad 정보가 쓸모없다는 뜻이 아니라, 지금 판에서는 평균을 밀어 올리는 일바닥을 받치는 일이 다른 feature 조합에 의해 나뉜다는 뜻에 더 가깝다. 그래서 요즘은 "가장 중요한 feature가 무엇인가"보다 어떤 실패 모드를 누가 막고 있는가를 먼저 적는 쪽이 더 실용적으로 느껴진다.

4. 그래서 내가 바꿔 적는 체크리스트

이후부터는 importance 표를 볼 때 메모 방식도 조금 바뀌었다. feature 이름 옆에 숫자만 남기지 않고, 그 숫자가 유효한 판을 같이 적는다. 그래야 다음 반복에서 다른 입력판을 붙였을 때 역할 변화가 바로 눈에 들어온다.

  • 첫째, importance를 읽기 전에 지금의 input surface를 먼저 적는다.
  • 둘째, mean test AUC만 보지 않고 hardest splitseed variance를 같이 본다.
  • 셋째, validation-test gap을 같이 남겨서 좋아 보이는 숫자가 얼마나 쉽게 미끄러지는지 확인한다.
  • 넷째, feature마다 booster, stabilizer, duplicate처럼 현재 맡는 역할 이름을 붙여 본다.

이렇게 적어 두면 importance가 더 이상 형이상학적인 서열표가 아니게 된다. 같은 degree를 두고도 "지워야 한다"와 "남겨야 한다"가 모두 맞을 수 있다는 사실을 받아들이기 쉬워지고, 그 차이가 어디서 생겼는지도 바로 설명할 수 있다. 내게는 이게 단순한 해석 습관 이상으로, 다음 실험 후보를 고르는 데 꽤 큰 차이를 만들었다.

5. 짧게 남겨두고 싶은 정리

GraphSAGE 실험을 하면서 요즘 더 먼저 묻게 되는 건 가장 중요한 feature가 무엇인가가 아니라, 이 입력판에서 바닥을 받치는 조합이 무엇인가다. mean을 조금 더 올리는 feature와 hardest split을 덜 무너지게 만드는 feature가 다를 수 있고, 그 차이는 단일 importance 랭킹보다 조합 비교에서 더 잘 드러난다.

물론 지금 숫자는 작은 sample graph에서 나온 결과라서 그대로 일반화할 수는 없다. 그래도 하나는 분명하게 남았다. feature importance는 열 하나에 붙어 있는 고정 성질이 아니라, 같이 놓인 축 사이에서 그 feature가 맡는 역할에 더 가깝다. 나는 당분간 GraphSAGE뿐 아니라 ranking, retrieval, tabular 모델을 볼 때도 이 관점을 계속 써 보게 될 것 같다.

댓글

홈으로 돌아가기

검색 결과

"" 검색 결과입니다.