노보네시스는 고객의 특정 환경에서 산업용 효모 제품의 성능을 이해하기 위해 노력하며, 당사의 응용 연구 개발 그룹은 고객 규모에 맞춰 최적의 효모 후보를 선별하는 데 필요한 통찰력 있는 데이터 세트를 생성하는 데 탁월한 역량을 발휘합니다. 연구원들은 광범위한 시나리오와 구체적인 고객 시나리오 모두와 관련된 복잡한 질문에 답하기 위해 통계적 기법을 정기적으로 활용합니다.
파이썬 라이브러리에 베이지안 방법론이 도입됨으로써, 기존의 통계적으로 유의미한 결과가 나오지 않는 경우에도 확률에 기반한 모델 구축 및 데이터 기반 의사결정을 더욱 효과적으로 수행할 수 있게 되었습니다. 또한, JMP 18의 새로운 기능은 파이썬과의 원활한 통합을 지원하여, 연구원들이 JMP를 벗어나지 않고도 대규모 데이터 세트를 생성하고 고객별 문의에 대응할 수 있도록 해줍니다. 응용 연구 데이터, 고객 시험 데이터, 그리고 사전 정보를 활용하여, 통계적으로 유의미하지 않은 추세에 의존하는 대신, 정보에 기반한 데이터와 베이지안 통계를 바탕으로 의사결정을 내리는 방향으로 나아가고 있습니다. 이러한 접근 방식은 성능에 대한 보다 포괄적인 이해와 정량화를 제공하고, 궁극적으로 더욱 정보에 입각한 의사결정을 가능하게 하는 것을 목표로 합니다.
안녕하세요, 저는 맷 와츠입니다. 노보네시스에서 바이오에너지 연구 개발을 담당하는 선임 과학자로 일하고 있습니다. 바이오에너지란 옥수수를 에탄올로 전환하는 과정을 말합니다. 저는 이 공정을 효율적으로 만들고 고객에게 최대한의 수율을 제공하는 데 필요한 효모와 옥수수 껍질 파쇄 효소를 담당하고 있습니다.
오늘 저는 데이터 기반 의사결정을 내리는 데 베이지안 분석 또는 통계를 어떻게 활용하고 있는지에 대해 이야기할 수 있는 기회를 갖게 되어 기쁩니다. 베이지안 통계가 무엇인지에 대한 배경 설명을 먼저 드리겠습니다. 저에게는 비교적 새로운 분야입니다. 지난 1년 동안 꾸준히 학습해 온 분야입니다. 아직 전문가라고 할 수는 없지만, 계속해서 배우고 발전해 나가고 있습니다. JMP18에는 파이썬 통합 기능이 더욱 강화되었습니다. 이 통합 기능을 사용하면서 알게 된 점과 개선된 점, 그리고 처음에는 다소 어려웠던 부분들에 대해서도 이야기해 보겠습니다.
베이지안 통계학 개론입니다. 베이지안 통계학은 확률을 이용하여 더 나은 데이터 기반 의사결정을 내리는 데 핵심적인 역할을 합니다. 특히 사전 지식을 활용해 추정치를 도출할 수 있다는 점에서 매우 유용합니다. 예를 들어, 에탄올 농도가 0보다 낮아질 수 없다는 등의 사전 정보를 바탕으로 다양한 변수에 제약을 둘 수 있습니다. 이는 모델 구축 등에서 베이지안 통계학이 매우 효과적으로 활용될 수 있는 부분입니다.
저는 리처드 맥엘리스의 '통계적 재고(Statistical Rethinking)'라는 강의를 참고했습니다. 슬라이드 오른쪽 하단에 링크가 있는데, 클릭할 수는 없지만 보실 수 있을 겁니다. 짧은 강의입니다. 이 강의는 베이지안 통계를 이해하는 데 매우 도움이 되었고, 실제로 이 강의에서 예시를 하나 가져와 베이지안 워크플로를 살펴보겠습니다. 이를 통해 베이지안 방법론을 적용할 때 어떤 과정이 진행되는지 이해하는 데 도움이 될 것입니다.
여기서는 지구 표면에서 물로 덮인 부분의 비율을 구하는 예시를 살펴보겠습니다. 베이지안 워크플로를 따라야 하는데, 오른쪽에 나와 있습니다. 마치 화가처럼 생각하시면 됩니다. 화가는 백지에서 바로 올빼미를 완성하지 않습니다. 세부 묘사를 더하고 여러 요소를 추가하기 위해 다양한 단계를 거칩니다. 먼저 도형을 그리고, 선을 그리고, 눈 구조와 깃털 등을 추가합니다.
베이지안 워크플로우를 생각할 때 이 부분이 정말 중요합니다. 첫 번째 단계는 육지 또는 물을 선택하는 생성 또는 인과 모델을 정의하는 것입니다. 지구본을 예로 들어 여러 샘플을 추출할 수 있는데, 이 샘플들이 각각 육지 또는 물을 나타냅니다. 워크플로우의 두 번째 단계는 추정치를 정의하는 것입니다. 여기서 추정치는 지구 표면에서 물로 덮인 부분의 비율입니다. 세 번째 단계는 좀 더 자세한 정보를 얻는 것입니다. 여러 육지 또는 물 샘플을 적용하여 비율을 추정하는 통계 모델을 개발할 것입니다.
베이지안 추론이 정말 어려워지는 부분이 바로 여기입니다. 추정하려는 값마다 다른 통계 모델이 필요할 수 있기 때문입니다. 통계 모델에 대한 폭넓은 지식과 모델이 알려주는 정보, 그리고 모델들이 어떻게 상호작용하여 정보를 도출하는지 이해해야 합니다. 저는 이 과정에서 많은 도움을 주는 자료들을 찾았는데, 나중에 몇 가지를 소개하겠습니다.
3단계에서는 기본적으로… 아니, 4단계에서 테스트할 겁니다. 4단계에서는 좀 더 세부적인 내용을 추가할 거예요. 생성 모델을 사용하여 통계 모델을 테스트할 겁니다. 이는 처음에 지구본을 선택했던 것과 기본적으로 같은 방식입니다. 이러한 샘플들을 통계 모델에 입력하고 물로 덮인 지구의 비율이 동일하게 나오는지 확인할 겁니다. 만약 제대로 작동하고 타당하다면, 통계 모델을 여러 번 샘플링할 수 있습니다.
일반적으로 우리는 여러 체인에 걸쳐 이 과정을 10,000번 반복하여 사후 분포를 얻습니다. 이 사후 분포를 통해 지구 표면의 75%가 물로 덮여 있을 확률을 구할 수 있습니다. 이 차트를 보면 가장 높은 확률로 지구의 75%가 물로 덮여 있다고 추측할 수 있는데, 이는 모델의 작동 원리를 시각적으로 보여주는 훌륭한 예입니다. 이러한 워크플로 단계에서는 테스트 과정을 정확히 이해하는 것이 매우 중요합니다. 작업 과정을 문서화하면 오류를 줄일 뿐만 아니라 재현성을 높이고 다른 사람들이 작업 내용을 쉽게 이해할 수 있도록 도와줍니다.
우리는 사후 분포라는 개념에 대해 간략하게 논의했지만, 사후 분포란 정확히 무엇일까요? 사후 분포는 사후 확률의 분포입니다. 여기서 저는 확률에 관한 베이지안 추론으로 다시 돌아갑니다. 사후 분포는 가능도에 사전 확률을 곱하여 계산됩니다. 즉, 사전 정보를 실제 증거 또는 실험에서 측정한 지표로 나눈 값입니다.
빨간색으로 표시된 분포를 보면 지구 표면의 75%가 물로 덮여 있을 확률이 높다는 것을 알 수 있습니다. 이는 제가 처음에 언급했던 데이터 기반 의사결정을 내리는 데 도움이 되는 확률적 추론입니다. 이것이 베이지안 추론에 대한 간략한 배경 설명입니다. 하지만 저는 JMP와 Python 통합 과정에서 겪었던 학습 곡선에 대해 이야기하고 싶었습니다. 가파른 오르막길도 있고, 내리막길도 있었고, 어려움도 있었지만, 결국 JMP에서 Python을 사용하는 것, 특히 JSL과 Python 스크립트를 결합할 때 많은 이점을 발견했습니다.
시간이 부족해서 슬라이드 전체를 다 설명할 순 없지만, PyMC를 꼭 추천하고 싶습니다. 이 파이썬 라이브러리는 베이지안 분석 코드 작성에 필수적이었을 뿐만 아니라, 웹사이트에서도 다양한 테스트에 활용할 수 있는 통계 모델 예제를 아주 잘 제공하고 있습니다. 더 나아가, 알고리즘을 실행하거나 최종 결과를 도출하기 전에 모델을 미리 테스트해 볼 수 있도록 도와주는 또 다른 시각화 소프트웨어도 소개하고 있는데, 이 소프트웨어는 나중에 자세히 살펴보겠습니다.
PyMC는 주피터 노트북에 최적화되어 있습니다. 완전히 그렇습니다. 그래서 사람들이 저에게 "왜 JMP의 파이썬 인터프리터를 사용해서 이걸 하냐"고 묻곤 합니다. 그 이유는 동료들이 작업에 필요한 활성화 에너지를 낮추기 위해서였습니다. 우리 회사는 JMP를 철저하게 사용하고 있습니다. JMP 내에서 클릭 몇 번으로 백엔드가 파이썬인 작업을 할 수 있다면, 동료들은 앞으로 나아가는 데 도움이 되는 새로운 도구를 사용할 수 있게 됩니다. 이것이 바로 우리가 이 여정을 시작하게 된 근본적인 이유입니다.
JMP에서 파이썬으로 코딩하기. 시각화는 제가 JMP를 좋아하는 이유 중 하나입니다. 데이터를 시각적으로 보고 탐색할 수 있죠. 하지만 파이썬에는 시각화를 도와주는 네이티브 라이브러리가 있는데, JMP에서는 바로 사용할 수 없다는 점이 가장 불편했습니다. 기본적으로 이미지를 직접 출력해야 하죠. 이 코드에서는 라이브러리에서 제공하는 정보를 바탕으로 데이터 테이블을 출력하여 데이터를 좀 더 쉽게 탐색할 수 있도록 했지만, 이 부분이 조금 어려웠습니다.
반면에 JMP는 사용자 입력, 예를 들어 열 목록을 입력하거나 스크립트 실행을 계속할지 여부를 결정하는 데 매우 유용합니다. 이러한 기능은 사용자가 상호 작용할 수 있는 팝업 창 형태로 제공되므로, 코드 어디에 열 이름을 입력하고 어떻게 이름을 지정해야 하는지 등을 직접 고민할 필요가 없습니다.
마지막으로, 제가 정말 큰 도움이 되었다고 느낀 부분은 앞서 말씀드린 것처럼 JSL을 파이썬 스크립트에 통합하는 것이었습니다. 이제 패널 박스에 이미지를 표시하고, 이미지 아래에 설명을 추가하여 사용자가 보고 있는 내용이 무엇인지 더 잘 이해할 수 있도록 도울 수 있습니다. 적어도 제게는 이러한 발전이 놀라웠습니다.
자, 이제 오늘 발표의 핵심인 스크립트에 대해 이야기해 보겠습니다. 먼저 관찰 결과에 영향을 미칠 몇 가지 요인을 선택해 보겠습니다. 여기서 관찰 결과는 에탄올 생산량입니다. JMP에서 제공하는 발효 공정 샘플 데이터 세트를 사용했으니, 스크립트를 받으신 분들은 누구나 이 데이터를 활용하실 수 있습니다.
우선 베이지안 워크플로우에서는 다시 한번 테스트, 테스트, 테스트가 핵심입니다. 시뮬레이션 데이터와 관측 데이터를 비교하여 선택한 통계 모델이 제대로 작동하는지 확인합니다. 보시다시피, 모델이 관측 데이터와 잘 일치하며 축의 범위도 너무 넓지 않습니다.
그다음에는 모델을 테스트할 수 있습니다. 모델 내의 단변량 매개변수를 살펴보고 각 밀도 함수가 서로 어떻게 보이는지 확인할 수 있습니다. 밀도 함수들이 서로 겹쳐 보이면 모델이 제대로 작동하고 있다는 좋은 신호입니다. 이를 위해 파이썬 라이브러리인 rvs를 사용하여 추적 플롯을 생성할 수 있습니다.
마지막으로 진행한 테스트는 에너지 플롯 다이어그램이었는데, U턴이 없는 샘플러를 살펴보았습니다. 이것이 바로 답을 도출하는 주요 알고리즘입니다. 다시 말하지만, 우리는 이러한 곡선, 즉 분포들이 서로 겹쳐져 있는지 확인했고, 실제로 겹쳐져 있었습니다.
이제 마지막 부분으로 넘어가겠습니다. 이것이 최종 데이터 세트입니다. JMP가 적합 모델을 어떻게 만드는지 보여드리고 싶었기 때문에 이 부분이 정말 중요합니다. 표준 최소 제곱법을 사용하면 탱크 수위와 공기량이 에탄올 생산에 매우 유의미한 영향을 미치는 것으로 나타납니다. 베이지안 방법론을 사용해도 같은 결과가 나옵니다. 탱크, 수위, 공기량이 모두 유의미하며, 0에서 가장 멀리 떨어져 있는 변수들입니다.
하지만 베이지안 모델의 장점은 좀 더 구체적인 단서를 제공한다는 점입니다. 즉, 긍정적 또는 부정적 효과를 파악할 수 있다는 것이죠. 여기서 연료 탱크 레벨이 크고 음수이므로, 연료가 많이 채워질수록 에탄올 함량은 낮아집니다. 반대로 공기량이 크고 양수이므로, 공기량이 많을수록 에탄올 함량은 높아집니다.
발효 과학자로서, 저는 최종 결론에 완전히 동의하는 건 아닙니다. 물론 이건 샘플 데이터 세트이긴 하지만, 두 방법 모두에서 동일한 결과가 나왔다는 점은 정말 흥미롭고, 베이지안 분석을 통해 얻은 추가 정보는 앞으로 나아갈 방향을 결정하는 데 도움이 될 것입니다. 하지만 제 직함에서 설명했듯이, 저희 노보자임스(또는 노보네시스)에서는 효모 관련 결정을 내리고 있습니다.
저희는 가상의 캐릭터 이름을 따서 클린트 이스트우드(Clint Yeastwood)라는 제품을 만들었습니다. 베이지안 분석을 통해 확률을 도출하고 이를 바탕으로 의사결정을 내릴 수 있었습니다. 이 베이지안 분석 결과, 클린트 이스트우드는 배드펌(BadFerm)보다 에탄올 함량을 1.1% 더 높게 유지할 확률이 78%에 달합니다. 이는 제품 개발에 매우 중요한 정보입니다.
요약하자면, 오늘 우리는 JMP에 파이썬을 통합하는 방법과 베이지안 방법론에 대해 이야기했습니다. 여러분 모두가 새로운 사고방식을 탐구하고 발견할 수 있는 잠재력을 발견했기를 바랍니다. 하지만 항상 테스트, 테스트, 테스트를 잊지 마세요. 베이지안 방법론에서는 테스트가 필수적입니다. 또한, 자신뿐만 아니라 동료, 그리고 이 방법을 함께 사용하는 모든 사람들이 이해할 수 있도록 문서화하는 것도 중요합니다.
마지막으로, 모든 것은 의사결정에 달려 있습니다. 이 내용을 통해 여러분이 데이터에 기반한 결정을 내릴 수 있기를 바라며, 새로운 가능성에 눈을 뜨게 되셨기를 바랍니다. 오늘 제 이야기를 들어주셔서 정말 감사합니다. 유익한 시간이었기를 바랍니다. 웹사이트에 방문해 주세요. 모든 스크립트와 정보가 거기에 있습니다. 혹시라도 도움이 필요하시면 언제든지 연락 주세요. 감사합니다.