편집자 주: 이 프리젠테이션은 Alicia Powers가 그래프커넥트 유럽 2016년 4월에 발표한 내용이에요. 그녀가 다룬 내용을 간단하게 살펴볼까요?
- 세계적인 비만 전염병
- Data Model을 확인하는 방법
- 추천 엔진의 주요 구성 요소
- 추천 엔진이 식습관을 바꾸는 방법
- 비욘세처럼 먹는 법
–
저는 뉴욕에서 공공 정책 분야에 종사하는 데이터 과학자예요. 오늘은 제가 수행한 첫 번째 프로젝트를 살펴볼 건데요. 를 사용했고, 추천 엔진을 활용해서 사람들의 건강을 개선하는 프로젝트였죠:
제가 처음 프로젝트를 시작했을 때, 이루고 싶었던 세 가지 목표가 있었어요. 이해하기 쉬운 Data Model, 데이터를 쉽게 탐색하고 새로운 인사이트를 얻을 수 있는 능력, 그리고 고품질 추천을 생성하는 능력이었죠.
프로젝트: 글로벌 비만 전염병
이 프로젝트는 미국의 비만율에 대응하기 위해 시작되었어요.
위 그래프는 체질량지수(BMI)가 30 이상인 인구의 비율을 보여주는데, 이걸 비만으로 분류하죠. 미국이 1위고 영국, 스페인, 프랑스, 한국이 그 뒤를 잇고 있어요. 보시다시피, 대부분의 선진국에서 꽤 일관된 상승 추세가 있었고 변하지 않는 것 같아요. 저는 음식과 건강과의 연관성을 더 잘 이해하기 위해 이 프로젝트를 시작하게 되었답니다.
데이터 세트
데이터 과학자로서 저는 데이터에 큰 동기부여를 받는데요, 특히 미국 질병통제예방센터(CDC)에서 제공하는 데이터 말이죠. 매년 CDC는 '질문'이라는 설문조사를 실시하는데, 바로 National Health and Nutrition Examination Survey (NHANES)에요. 이 조사를 통해 사람들이 먹는 음식이 건강과 어떤 관련이 있는지 파악하려고 노력하죠.
이 프로젝트에서는 제가 찾을 수 있는 가장 최근에 업데이트된 데이터(2012년)를 사용했어요. 이 특정 데이터에는 1세부터 80세까지 9,000명 이상의 사람들이 포함되어 있고, 이틀 동안 이 사람들이 소비한 모든 음식과 음료를 추적한답니다.
데이터는 각 개인에 대한 인구통계학적 정보는 물론 무엇을, 얼마나 먹었는지, 어디서 먹었는지, 언제 먹었는지까지 제공해요. 데이터에는 5,000가지가 넘는 다양한 음식 유형, 4,000가지 음식 특성, 90,000가지 식사가 포함되어 있답니다. 이틀 동안 9,000명이 참여했다는 건 각 사람이 평균 10개의 식사 상황 (이벤트라고도 하죠)을 등록하고 있다는 걸 의미해요.
데이터 연결
저는 이 모든 데이터가 어떻게 연결되는지 알고 싶었어요. 물론 SQL로도 이 작업을 할 수 있었죠. 뭘 JOIN해야 하는지, 프로젝트에 사용할 표준 통계 및 분석이 뭔지도 알고 있었고요. 하지만 저는 데이터가 좀 더 다르게 보이고 더 쉽게 접근할 수 있기를 바랐고, 바로 이럴 때 Neo4j가 등장하는 거죠!
다음은 제가 개발한 그래프 데이터 모델이에요. 이 모델은 접근성이 뛰어나고 쉽게 추천할 수 있는 방법을 제공한답니다.
왼쪽에는 Person node가 있어요. 성별, 인종, 민족, 연령, BMI를 포함하는 풍부한 속성 세트와 함께 음식을 소비하는 장소 정보도 담고 있죠. 이 사람은 Event node와 연결되어 있는데, 특정 시간과 장소에서 발생하는 이벤트들을 나타내요. 이 특별한 이벤트는 금요일 자정에 집에서 간식을 먹은 경우를 나타내고, 초콜릿과 바닐라 쿠키를 먹었다는 정보도 담겨있네요. 어디에서 왔는지, 영양 정보는 뭔지, 얼마나 먹었는지까지 알 수 있다니!
CDC 데이터 세트에는 음식 유형은 포함되어 있었지만, 슬라이드 오른쪽 하단의 음식 특성 node에 포함된 정보는 없었어요. 저는 쿠키, 초콜릿, 바닐라 샌드위치라는 이름을 구문 분석하기 위해 R에 코드를 좀 작성했죠. Bag of Words를 사용해서 속성을 할당하고, Neo4j를 사용해서 시스템에 통합했어요. 그런 다음 다양한 요소로 다양한 음식에 태그를 지정했는데, 예를 들어 쿠키, 파이, 케이크와 같은 음식에 설탕을 할당했죠. 좀 조악하고 빠르게 처리했지만, 꽤 괜찮은 결과가 나왔어요.
점심을 먹는 여성들: 예
Neo4j에서 데이터가 어떻게 보이는지 한번 살펴볼까요? 다음은 점심을 먹고 있는 두 여성의 데이터에요.
파란색 node는 여성을 나타내고, 각각 "점심" 이벤트와 연결되어 있어요. 만약 이게 라이브 데모였다면 각 이벤트 위에 마우스를 올려서 어디에서 식사하고 있는지 확인할 수 있었을 텐데, 여기서는 레스토랑에서 식사했네요. 두 사람은 버터밀크 파이를 공유했는데, 그 외에는 서로 다른 음식을 먹었어요.
이 그래프에는 다른 음식에 대한 연결 방법을 제공하는 녹색 node(파이 및 버터밀크)로 표시되는 음식 특성도 포함되어 있어요. 이 경우 버터밀크는 실제 버터밀크, 지방이 1% 및 2%인 버터밀크, 지방이 없는 버터밀크와 연결되죠. 즉, 이 특성은 다양한 유형의 음식을 서로 연결하는 데 도움이 된다는 거에요.
데이터 모델 확인
우리가 작업 중인 CDC 데이터는 미국에서 나온 데이터이기 때문에, 전 세계의 비만 추세에 초점을 맞출 거예요. 데이터 과학자로서 여러분이 가장 먼저 물어야 할 질문은 "내 데이터가 내가 모델링하고 있다고 생각하는 이 세계를 실제로 나타내는가?"일 거예요. 이에 답하기 위해 저는 아주 간단한 작업을 수행했어요. 이 데이터 세트에서 사람들이 소비하는 최고의 음식과 음료를 살펴봤죠.
좋은 소식은 사람들이 물을 많이 마신다는 점이에요. 하지만 양상추와 토마토는 뭘까요? 겉보기엔 사람들이 샐러드를 많이 먹는 것 같지만, 실제로는 사람들이 함께 먹는 음식 조합을 알아보기 위해 시장 바구니 분석을 해봤어요. 분석 결과, 사람들은 주로 햄버거나 샌드위치의 일부로 양상추와 토마토를 먹고 있더라구요.
커피와 설탕도 비슷한 패턴을 보이는데요. 사람들은 커피에 설탕을 넣어 마시죠. 케첩은 보통 튀긴 음식과 함께 먹고, 그 다음으로는 빵, 콜라, 마요네즈 등이 있어요. 이 정보를 보면 건강에 그다지 좋지 않은 데이터 세트를 보고 있다는 느낌이 들어요.
추천 엔진의 주요 구성 요소
미국에서는 1억 8백만 명이 다이어트 중이거나 체중 감량을 위해 노력하고 있다고 해요. 이 시장 규모가 무려 800억 달러나 된다고 하니 정말 크죠? 연예인 다이어트, 다이어트 책, 약물, 심지어 수술까지, 미국인들은 체중 감량에 엄청난 돈을 쓰고 있어요. 하지만 비만율을 보면 원하는 만큼 효과가 있지는 않은 것 같아요.
데이터 과학자인 저는 기술적인 해결책이 있을지 궁금했어요. 그러던 중 비욘세가 자신만의 다이어트 식단인 '22일'을 출시했다는 소식을 접했죠. 저는 비욘세의 열렬한 팬이라, 22일 후에 그녀처럼 될 수 있다면 한번 시도해보고 싶다고 생각했어요.
이 식단은 콩이나 글루텐이 없는 100% 유기농 식물성 식품으로 구성되어 있고, 맛도 좋고 완벽한 비율로 제공된다고 해요. 하지만 이건 현재 평균적인 미국인이 먹는 방식과는 너무나 다르기 때문에, 모든 사람에게 적용될 수 있을지는 의문이에요. 우리 모두는 각자의 욕구와 필요를 가진 개인이기 때문에, 획일적인 접근 방식은 효과가 없을 가능성이 높아요. 추천을 고려할 때 이런 점을 이해하는 것이 중요해요.
양질의 추천을 제공하기 위해, 저는 미국에서의 식사를 접근성, 영양, 즐거움이라는 세 가지 단계로 나누어 살펴보는 접근 방식을 취했어요. 접근성이 좋으면 하루에 10시간씩 일하는 사람은 집에 돌아와서 직접 요리해 먹을 가능성이 거의 없죠. 대신, 나가서 간단하게 외식을 하거나 포장해 올 거예요. 영양도 매우 중요하지만, 즐거움 또한 간과할 수 없어요. 특히 미국에서는 음식이 즐거움과 만족을 위해 많이 판매되니까요. 좋은 음식 추천 엔진이라면 이런 요소들을 모두 고려해야 할 거예요.
개인화 vs. 맞춤화
사람들이 추천에 대해 이야기할 때, 실제로는 개인화(Personalization)에 대해 이야기하는 경우가 많아요.
개인화는 주로 유사성을 기반으로 예측을 시도하고, 사용자 데이터를 활용하는 방식이에요. 반면에, 맞춤화(Customization)는 사용자가 직접 입력을 제공하고 추천을 어느 정도 제어할 수 있다는 점에서 차이가 있죠.
다음으로는 추천 알고리즘을 한번 살펴볼까요?
개인화 측면에는 많은 협업 필터링이 있어요. 이 아이디어에 익숙하지 않다면, 비슷한 것을 좋아하는 다른 사람들과 함께 여러분이 좋아하는 특정 물건을 사용하고, 비슷한 사람이 구입한 제품에 대한 추천을 제공하는 Amazon을 생각해 보세요. 이건 음식 분야에서도 똑같이 적용될 수 있죠. 만약 제가 특정 음식을 좋아하고 다른 사람도 같은 음식을 좋아한다면, 우리도 비슷한 종류의 다른 음식을 좋아할 가능성이 매우 높아요.
개인화의 또 다른 접근 방식은 콘텐츠 필터링인데, 이건 사람보다는 콘텐츠에 더 집중하는 방식이에요. 좋은 예시는 특정 영화와 TV 프로그램의 특성을 활용해서 추천을 제공하는 Netflix죠. 예를 들어, 여러분이 만화책을 기반으로 한 영화를 좋아한다면 Netflix는 해당 장르의 다른 영화를 추천해 줄 거예요. 식품 특성과 관련된 부분도 있어서 식품 분야에서도 잘 작동해요. 매운 음식을 좋아하는 사람이라면 좀 더 매운 음식을 추천하고, 바삭한 음식을 좋아하는 사람이라면 좀 더 바삭한 음식을 추천하는 식으로요.
식품 분야의 추천이 다른 영역의 추천과 차별화되는 점은 바로 "맞춤화"의 필요성이에요. 누군가 알레르기가 있거나 특정 유형의 음식(예: 고기)을 먹지 않기로 결정해서 특정 음식 카테고리를 제외해야 하는 경우도 있거든요. 그리고 퀄리티 높은 추천을 하려면 알아야 할 사용자 데이터에서 볼 수 없는 것들이 있죠. 또한 사람들은 일일 섭취량을 맞춤화하고 싶어 할 거예요. 예를 들어, 가족 모두가 감기에 걸렸을 때 비타민C 섭취량을 늘리기로 결정할 수도 있잖아요. 이걸 추천 엔진에 넣으면 비타민C 함량이 높은 음식이 추천될 거예요.
이 도구의 성공적인 조합은 부분적인 개인화와 부분적인 맞춤화의 조화라고 생각해요. 이 추천 도구는 사람들이 자신의 행동을 바꾸고 더 건강한 선택을 하도록 돕기 위해 만들어졌어요. 개인화가 제대로 작동하면 마치 마법처럼 느껴지죠. "놀라워요! 저를 너무 잘 아시네요!" 라는 느낌이랄까요? 그리고 커스터마이징을 통해 개인은 그 과정에서 공동 창작자가 될 수 있는데, 이건 정말 중요한 심리적 요소랍니다.
추천 엔진을 사용해서 식습관 바꾸기
이제 Neo4j 예제를 한번 살펴볼까요? 먼저 "누가 도움이 필요할까요?"라는 질문에 답해야 해요. 이 거대한 데이터 셋에서 일종의 추천 엔진을 사용해서 도움을 받을 수 있는 사람들을 어떻게 식별할 수 있을까요? 이번에도 단순성에 집중해서, 야채를 아주 적게(이틀에 2개 미만) 섭취하고 설탕을 많이(이틀에 9개 이상) 섭취하는 사람들을 찾아보기로 했어요. 이 Query는 아래와 같아요.
이건 이틀 동안 야채 인스턴스 1개와 설탕 인스턴스 10개를 섭취한 BMI가 40인 개인을 반환한 결과에요. 아래는 그를 중심으로 그의 모든 음식 인스턴스가 포함된 그래프랍니다.
이 데이터를 그래프로 표현하면 중요한 인사이트가 드러나요. 이 사람은 이틀 동안 아침과 저녁은 챙겨 먹지만 점심은 거르는군요. 식사 외에는 쿠키, 켈로그 스페셜 K 바, 견과류, 팝콘 같은 간식을 즐겨 먹는 것 같아요. 이 분에게는 아주 간단하지만 중요한 추천을 해줄 수 있겠네요. 바로 매일 점심을 챙겨 드시라는 거죠! Neo4j가 얼마나 쉽게 데이터에서 인사이트를 뽑아낼 수 있는지 바로 알 수 있죠?
“어떻게 식습관을 성공적으로 바꿀 수 있을까요?”라는 질문으로 다시 돌아가 볼게요. 가장 좋은 방법은 작은 변화를 꾸준히 주는 거예요. 점심 식사에 작은 변화를 주는 것만으로도 건강한 식습관에 한 걸음 더 다가갈 수 있답니다. 우리가 추천하는 음식의 세 가지 중요한 특징, 즉 접근성, 영양, 그리고 즐거움을 꼭 기억하세요!
이 분은 간식을 많이 드시는 걸 보니, 낮에는 주로 밖에 계신다고 추측할 수 있겠네요. 그렇다면 휴대하기 좋은 점심 솔루션을 추천해야겠죠. 평균 성인 남성의 점심 식사는 약 600칼로리 정도니까, 이 범위에 맞는 음식을 추천해 드릴게요. 그리고 즐거움이라는 요소도 충족시키기 위해, 비슷한 음식을 좋아하지만 더 건강하게 드시는 분들의 식단을 참고할 거예요.
다시 말하지만, 성공적인 조합은 개인화와 맞춤화에 달려있어요. 이 분은 자신보다 건강하지만 음식 취향은 비슷한 사람들의 식단을 따라 하고 싶어 할 거예요. 맞춤화 측면에서는, 밖에 있을 때나 특정 칼로리 미만의 식단을 원할 때 먹을 수 있는 솔루션이 필요하겠죠.
개인화된 쿼리 수행
먼저 개인화된 쿼리를 한번 살펴볼까요?
이제 우리는 이 남자와 공통점이 많지만 더 건강한 사람을 찾고 싶어요. 이 특정 개인은 원래 개인과 공통된 6가지 음식을 가지고 있고, 그 이틀 동안 그들은 6가지 공통 음식을 먹었죠. 가장 먼저 보이는 숫자인 604는 그가 먹은 다양한 음식의 횟수예요. 저는 또한 그들이 이 음식에서 얼마나 많은 칼로리를 소비하는지 살펴보았는데요. 건강에 해로운 사람은 식사당 평균 600칼로리를 섭취한 반면, 건강한 사람은 식사당 평균 476칼로리를 섭취한 것을 알 수 있어요. 이러한 것들은 통계적으로 직접적으로 비교할 수는 없지만 설명하기에는 매우 간단한 개념이죠.
이제 몇 가지 점심 권장 사항을 제공할 수 있고, 여기에 맞춤화가 적용되는 거예요. 아래 예에는 쿠키와 특수 K 바를 먹는 남자가 있지만 그는 편의점에서 구입하는 600칼로리 미만의 점심을 먹고 있어요.
결과적으로 핫도그, 양배추 샐러드, 머스타드, 마요네즈, 카페인이 함유된 청량음료가 포함된 점심 추천을 받게 되었어요. 영양사가 추천할 만한 식단은 아니겠지만, 첫 번째 남자가 원래 먹던 것보다는 더 건강하고, 아마도 그 권장 사항을 기꺼이 받아들일 수 있을 거예요. 그러면 그의 목표에 더 가까워질 수 있겠죠.
비욘세처럼 먹는 법
이건 Neo4j가 통찰력을 제공하고 고품질 추천 엔진으로 작동하는 접근 가능한 모델을 제공할 수 있는지 확인하기 위해 제가 수행한 개념 증명에 대한 개요예요. 저에게는 아주 잘 되는 것이 분명하죠. 하지만 사람들이 실제로 사용하고 싶어하는 즉시 생산 가능한 제품을 만들려면 더 많은 데이터 포인트가 필요해요. 현재 저는 특정 하위 집단에 대한 정보를 이틀 동안만 가지고 있거든요.
피드백 루프도 필요해요. 제가 누군가에게 한 추천이 실제로 그 사람이 할 수도 있는 일인지, 실제로 했는지 아닌지, 그리고 그것이 긍정적인 변화를 가져오는지 여부를 알아야 하죠. 생활 방식, 수면 등 더 많은 유형의 데이터 포인트도 도움이 될 거예요.
즉, 여러 가지 가능성도 있다는 거죠. 비욘세의 다이어트로 돌아가 보자구요. 구조 내에서도 맞춤 추천을 통해 누군가가 비욘세의 라이프스타일에 더 가까워지도록 도울 수 있을 거예요. 고기, 글루텐 또는 콩이 포함되지 않은 모든 유형의 식사를 검색하고 유기농 식품이 비싸기 때문에 유기농 식품(예: 20% 또는 30%)을 반환하는 `Query`를 작성할 수 있어요. 또한 개인화 측면을 추가할 수도 있구요.
크런치처럼 여러분이 좋아하는 음식과 비슷한 특징을 가진 비건 음식을 추천해서, 음식 대체가 더 쉬워지도록 할 수도 있어요.
Neo4j를 사용해서 가능해진 연결된 데이터의 힘! 정말 대단하죠? 덕분에 사람들이 실제로 어떻게 먹는지 이해하고, 정말 도움이 되는 추천을 해줄 수 있게 되었어요.
- CDC
- 질병관리센터
- 그래프 데이터 모델
에이치시스템즈의 LogTree는 Neo4j 기반 GraphRAG 플랫폼으로, 데이터를 자동으로 지식그래프화하고 자연어 질의로 즉시 답을 제공합니다.
'GraphRAG' 카테고리의 다른 글
| Novartis의 초기 신약 개발, 점들을 잇다: Neo4j와 GraphRAG의 활약 (2) | 2026.04.26 |
|---|---|
| 헬스케어를 연결하다: Neo4j와 GraphRAG로 혁신을 이루는 방법 (0) | 2026.04.25 |
| Amnesia Is All You Need (0) | 2026.04.25 |
| 세계 리더를 위한 글로벌 이슈 그래프 구축: Neo4j와 GraphRAG 활용기 (2) | 2026.04.24 |
| Neo4j Aura Agent: 단 몇 분 만에 나만의 GraphRAG Agent 만들기 (1) | 2026.04.24 |
