칸트의 초월 철학과 시스템사고: 조건을 묻는 사유로서의 작동원리 사고

이미지
[시스템사고 팟캐스트] 음성으로 요약본을 들어 보세요. (7분24초) 클릭 시작하며: 사유의 요지경 속에서 “시스템은 왜 그런 방식으로 작동하는가?” 이 단순해 보이는 질문 하나가 나를 오래 붙들었습니다. 시스템다이내믹스를 배우면서, 그리고 가르치면서, 작동원리 사고(operational thinking)는 늘 저에게 이상한 요지경 같았습니다. 작동 방식이란 게 단지 메커니즘만을 뜻하는 것이 아니라, 어떤 조건 아래에서 그렇게 ‘보이게 되는가’를 묻는 철학적인 사유까지 포함한다는 걸 조금씩 깨달았기 때문입니다. 그러다 문득 칸트가 떠올랐습니다. “어떻게 그런 인식이 가능한가?”라는 그의 질문은, 시스템다이내믹스가 던지는 질문과 무척 닮아 있었습니다. 이 에세이는, 이 둘이 만나는 그 지점에서 시작됩니다. 세 층위의 사유: 현상, 구조, 조건 시스템을 바라보는 사유에는 적어도 세 가지 층위가 존재합니다. 현상적 층위 : “지금 무슨 일이 벌어지고 있는가?” 보이는 현상, 드러난 변화. 구조적 층위 : “왜 그런 일이 반복적으로 일어나는가?” 그 현상을 낳는 피드백 구조와 변수들. 조건적 층위 : “그 구조는 왜 그런 식으로 작동하는가?” 구조가 작동하도록 만드는 더 깊은 조건들. 이 조건적 층위를 탐색할 때, 우리는 단지 시스템 내부를 보는 것이 아니라, 경계 에 서서 그 시스템을 가능하게 만든 배경, 가치, 맥락을 사유하게 됩니다. 바로 그 지점에서 철학이 시스템사고와 만납니다. 칸트와 시스템사고: 조건을 묻는다는 것 칸트는 『순수이성비판』에서 “인식이 어떻게 가능한가”를 묻습니다. 이 질문은 단지 '무엇을 아는가'가 아니라, '어떻게 그런 방식으로 알게 되는가'를 묻는 질문입니다. 그는 세계 바깥을 논하지 않습니다. 세계가 나에게 어떻게 경험으로 나타나는가 , 그 조건을 묻습니다. 시스템사고의 작동원리 사고도 마찬가지입니다. 우리는 “왜 이 시스템은 이런 행동을 하는가?”를 묻다가, 어느 순간 “...

숫자에 흔들리다: 시스템사고 전문가의 부끄러운 고백

 시스템사고를 가르치는 내가 정작 시스템사고의 함정에 빠지다니. 오늘 파리 마라톤을 앞두고 마지막 의미 있는 훈련을 마쳤다. 8.86km를 집에서 호수공원 왕복으로 달리면서, 마라톤에서 적용할 5km마다 2분씩 쉬는 전략을 다시 한번 시험해봤다. 운동 자체는 만족스러웠다. 다양한 페이스로 달리며 심박수 반응을 살폈고, 의도적으로 멈춰 쉬었을 때 심박수가 빠르게 회복되는 것도 확인했다. 그런데 운동을 마치고 기록을 확인한 순간, 내 마음이 무너졌다. "VO2max: 44" 단 하나의 숫자가 나를 흔들어놓았다. 지난 몇 달간 45를 유지해오던 내 VO2max가 45에서 44로 떨어진 것이다. VO2max는 최대 산소 섭취량으로 산소(O2)의 부피(Volume)이 최대치라는 의미로 운동중 심폐 능력과 지구력을 나타내는 정량적인 지표로 사용된다. 작년에 44에서 45로 상승한 것을 나는 훈장처럼 여겼다. 그래서 이성적으로는 1 포인트 감소가 큰 의미가 없다는 것을 알면서도, 감정은 다른 말을 했다. "뭐지? 컨디션이 안 좋아진 건가? 마라톤을 앞두고 체력이 떨어지고 있는 건가?" 순간, 시스템사고를 가르치는 전문가로서 깊은 부끄러움이 밀려왔다. 나는 강의실에서 학생들에게 무엇을 말했던가? "우리는 시스템의 행동을 단편적인 데이터 포인트(현상)가 아닌, 패턴과 구조를 통해 이해해야 합니다." "저량(stock)의 순간적인 변화에 집중하기보다, 흐름(flow)의 방향과 패턴을 보아야 합니다." 그리고 무엇보다... "우리의 삶은 미분으로 살고 적분으로 드러납니다. 그래서 순간의 적분값에 일희일비하지 마세요." 시스템사고자의 자기모순 호수를 한 바퀴 돌고 집으로 돌아오는 길, 나는 이 모순에 대해 곰곰이 생각했다. 왜 나는 내가 가르치는 원칙을 실제 삶에 적용하는 데 실패했을까? 첫째, 나는 '숫자의 유혹'에 빠졌다. 시스템은 복잡하지만, 숫자는 ...

미분으로 달리고, 적분으로 늙어간다 – 마라톤에 대한 시스템사고

이미지
  미분으로 살고 적분으로 드러난다 — 마라톤과 시스템사고의 만남 우리는 삶에서 '흐름(flow)'으로 살고, '저량(stock)'으로 평가받습니다. 하루하루 살아가는 방식은 미분의 순간들—즉 작은 행동의 연속이지만, 세상에 보이는 나는 그 행동들이 쌓인 총합(적분)으로 드러납니다. 바로 적분의 결과인 나, 내 건강, 내 평판, 내 관계, 내 삶이죠. 행동은 흐름, 판단은 저량 시스템사고에서는 흐름(flow)은 시간에 따른 변화량을 의미하고, 저량(貯量, stock)은 그 변화가 누적(적분)된 상태를 뜻합니다. 우리는 체중계에 올라 체중(저량)을 보고 건강 상태를 판단하지만, 그 체중을 만든 것은 매일의 식습관과 운동량이라는 흐름입니다. 하지만 여기에는 하나의 함정이 있습니다. 저량은 흐름의 변화에 곧바로 반응하지 않습니다. 저량은 흐름이 있어야 변합니다. 하지만, 우리가 어떤 행동을 시작해도 결과는 당장 나타나지 않죠. 지연이 있습니다. 그리고 이런 지연되어 나타나는 결과마저도 변화량에 정비례하지도 않고, 때로는 역설적이기도 합니다. 바로 이것이 비선형적 지연 이며, 시스템사고가 세상의 복잡성을 해석하는 데 중요한 이유입니다. 마라톤에서 경험하는 시스템사고 마라톤을 달리면서 저는 똑같은 경험을 합니다. 20km, 25km, 30km를 넘어가며 ‘그동안의 훈련량’과 '지금까지 달려 온 운동량'의 누적(적분)값이 드러나기 시작합니다. 달릴 때마다 심박수라는 흐름이 바뀌고, 그 흐름이 누적되며 몸의 상태라는 저량에 간접적으로 영향을 줍니다. 그런데 흥미로운 점은, 이 저량의 변화가 느리게 드러나기 때문에, 몸이 보내는 경고를 늦게 알아차린다는 점입니다. 저는 한때 “쉬지 않고 달리는 것” 을 훈장처럼 여겼습니다. 그래서 달리면서 목격되는 '지쳐 걸어가는 사람들'을 보며 내심 뿌듯했습니다. 마치 인과순환지도에서 ‘쉬지 않고 달리는 노력’ → ‘자기 효능감’ → ‘성취’ → ‘쉬지 않고 달리는 ...

DT 심화 학습: “유량 × 시간 = 저량의 증가분” 개념

이미지
  1. 욕조 모델에서 “유량 × 시간 = 저량의 증가분” 개념 1.1 욕조에 물을 붓는 상황을 상상 유량(Inflow) = 수돗물을 틀어놓는 속도 (예: 20리터/시간, 10리터/시간 등) 저량(Stock) = 욕조에 현재 담겨 있는 물의 양 (예: 몇 리터(L)인지) 우리 일상에서, “수돗물을 20리터/시간(liters per hour, L/h) 속도로 욕조에 채운다면 한 시간에 20리터가 채워진다” 는 경험은 익숙합니다. 이것을 재미있게 표현하면 이렇습니다. "한 시간 동안 채운다고 약속하면 20리터를 채우게 된다." 그런데 만약 약속을 어기고 30분만 채운다면 어떻게 되겠습니까? “수돗물을 20리터/시간(liters per hour, L/h) 속도로  30분(0.5시간) 틀어놓으면, 물은 10리터가 채워진다" 왜냐하면 20 (리터/시간) × 0.5 (시간) = 10 (리터)이기 때문입니다.  그런데 위 식은 엄청난 비밀을 품고 있습니다.  ‘유량’(rate)은  20리터/시간(liters per hour, L/h) 입니다.  이 표현은 단지 한 시간 동안 채우기로 한 약속을 지켰을 때 20리터의 결과물(저량, Stock)을 보여준다는 것일 뿐입니다. 약속일 뿐입니다. 따라서, 실제 약속을 지키는지 안 지키는지는 따져 봐야 합니다.  이것을 수학적으로 표현하면 다음과 같습니다.  유량은 실제 시간당 몇 리터씩 들어가는지 나타내고, 실제로 얼마나 들어갔는지는 그 유량에 ‘물 흐른 시간’을 곱해야 합니다. 그만큼만 욕조의 물이 변합니다.  “유량 × 시간 = 저량의 증가분” 1.2 시스템 다이내믹스의 오일러 적분(Euler Integration) Stella(등 시스템 다이내믹스 툴)는 시뮬레이션을 DT 간격으로 잘라 , 각 스텝마다 Δ Stock    =    ( Inflow rate ) × ( DT )  로 계산합니다. (쉿!, 사실...

Andrew Ford 헌정 강의: 『Modeling the Environment』 Chapter 4 : Step Size 의 개념에 대한 1단계 해설

이미지
  “Step Size”란 무엇인가? 시스템다이내믹스 모델링을 할 때 가장 중요한 설정 중 하나가 바로 step size(시간 스텝) 입니다. 쉽게 말해, “시뮬레이션을 몇 년(혹은 몇 달, 몇 일) 간격으로 끊어 계산할지”를 결정하는 값이라 할 수 있습니다. 예를 들어, 10년 단위로 끊어서 계산하는 모델과 1년 단위로 끊어서 계산하는 모델 은 같은 이론적 방정식을 쓰더라도, 결과에서 차이가 발생할 수 있습니다. “길게 끊어서 계산하면 오차가 커진다?” 대화 중에서, 수학을 어려워하시는 분께서 질문하셨습니다. “시간을 길게 끊어 계산할수록, 왜 시뮬레이션 오차가 커진다고 하나요? 10년씩 단위로 계산하면 뭐가 문제인지요?” 이는 미분방정식을 수치적으로 풀 때 중간 변화 가 충분히 반영되지 못하기 때문입니다. 한 번에 “10년 치”의 변화를 훅 건너뛰면, 실제 시스템이 10년 동안 서서히 변하는 과정을 제대로 추적하기 어렵게 됩니다. 반면, 1년 단위 또는 1개월 단위처럼 작게 쪼개면, 실제 곡선(연속적 변화)을 더 세밀하게 따라잡을 수 있어 시뮬레이션 결과가 보다 정확해지죠. 왜 이렇게 나누어 계산할까? 시스템다이내믹스에서는 저량(Stock)과 유량(Flow) 간 상호작용을 시간 흐름에 따라 단계별로 업데이트합니다. 예컨대, “다음 시점(예: 다음 달)”이 되었을 때 유량 × (시간 간격) 만큼 저량이 증가(또는 감소)한다고 보고, 이를 계속 누적해 나가는 식이죠. step size가 크면 : 계산 횟수가 줄어들어 속도는 빠를 수 있지만, “중간의 세부 변화”가 무시되어 큰 근사 오차가 생길 수 있습니다. step size가 작으면 : 세밀하게 추적하므로 정확도는 올라가지만, 그만큼 컴퓨터 연산량이 늘어나 시간이 오래 걸립니다. 따라서 “시뮬레이션 목적에 맞추어 적절한 스텝 크기를 선택” 하는 것이 핵심입니다. 작은 스텝이 무조건 좋은 것은 아니다? “그렇다면 무조건 스텝을 최대한 작게 잡으면 좋지 않냐...

Andrew Ford 헌정 강의: 『Modeling the Environment』 Chapter 4: Joe의 고민, 어느 정도해야 정확한 건가요?

이미지
  Joe의 질문: “How close is close enough?” 이번 포스팅에서는 Chapter 4에서 등장하는 Box 4.1 의 주인공, Joe가 던진 흥미로운 질문을 살펴봅니다. Joe는 시스템다이내믹스(SD) 시뮬레이션에서 DT(델타 t)를 절반으로 줄여가며 정확도를 확인해야 한다는 조언을 이해했지만, 정작 “어느 정도 같으면 ‘비슷하다(essentially the same)’고 할 수 있지?” 라는 궁금증을 느끼고 있습니다. 1. Joe의 고민: “결과가 얼마나 비슷하면 충분히 정확한 것인가?” Joe는 시뮬레이션을 해 보면, DT 를 절반으로 줄일 때마다 결과가 조금씩 바뀐다는 걸 압니다. 문제는 “어느 시점에서 멈추면 되나?(어느 정도 줄여야 하나?)” 라는 것이죠. “최종 시점 결과만 비슷하면 될까, 아니면 중간 경로도 똑같이 따라가야 할까?” “1% 이내면 괜찮다고 할 수 있나, 0.1% 이내여야 하나?” 이는 생각보다 쉽게 대답하기 어려운 문제입니다. 2. 교실에서 답하기 곤란한 이유: “현실 맥락이 다 다르다” 본문에서도 지적하듯이, 교실에서 추상적으로 는 “1% 미만이면 충분히 근사한 것 아닌가?”라고 단정하기 어렵습니다. 왜냐하면 모델링 목표 나 현실 문제의 맥락 에 따라 수용 가능한 오차 범위가 달라지기 때문이죠. 예시 A: 느슨한 에너지 수요 모델 만약 장기 추세만 파악하면 되는 에너지 수요 예측 모델이라면, 2~3% 정도 차이가 나도 큰 문제 없이 “비슷하다”고 칠 수 있습니다. 결국 에너지 정책 방향이나 경향성만 보면 되니까요. 예시 B: 항공기 착륙 시뮬레이션 반면 항공기 착륙 시뮬레이션이나 로켓 발사 시뮬레이션이라면, 1% 오차도 치명적일 수 있습니다. 이 경우엔 DT를 더 줄이든, 고차 적분법을 쓰든 해서 오차를 0.1% 이하로 맞춰야 안심할 수 있겠죠. 3. “전체 패턴 vs. 최종 값” 문제도 중요한 쟁점 Joe는 “시뮬레이션 결과가 전 구간에서 잘 맞아야 하느냐, 아니면 마지막 시점에...

Andrew Ford 헌정 강의: 『Modeling the Environment』 Chapter 4 : 중학생도 이해(?)할 수 있는 Runge-Kutta 방식과 Euler 방식의 적분 계산법 차이

이미지
  4장에서 적분 방식에 대한 언급이 살짝됩니다. 하지만, 구체적인 설명은 없습니다. 솔직히 모르셔도 됩니다. 소프트웨어에 맡겨서 진행하시고 결과에 대한 내용을 논문이나 보고서에 작성해도 전혀 손색이 없습니다. 보통 기본 값으로 오일러(Euler) 방식으로 처리합니다. 하지만, 가끔, 아주 가끔 룬게-쿠타 방식이 나올 때도 있습니다. 그래서 쉽게 풀어보려고 작성해 봤습니다. 아래 글은 안 보셔도 괜찮습니다. 저처럼 궁금해서 미칠 것 같은 분만 보세요. ^^ 솔직히 중학생도 이해할 수 있다고 자신할 수 없지만, 그대로 쉽게 설명하기 위해 노력했습니다. ^^ 1. 미분방정식을 수치적으로 푼다는 건 무슨 뜻일까? 수학 교과서에서 d y d t = f ( t , y ) 같은 미분방정식을 보면, " t 라는 시간에 따라 y 가 어떻게 바뀌는지”를 나타내죠. 하지만 실제로는 이걸 종이와 연필로 풀기(해석적 해 구하기)가 쉽지 않거나 불가능한 때가 많습니다. 그럴 때 “수치적 방법(numerical method)” 을 써서 조금씩 앞으로 나아가며 y 값을 근사 하는 것이지요. 예를 들어, 처음 시점에서 y ( 0 ) 을 알고 있다면, “조금 뒤( Δ t 후)”의 값인 y ( Δ t ) 를 대략적으로 구하고, 또 그 다음 값 y ( 2 Δ t ) 를 구해나가는 식입니다. 2. 오일러(Euler) 방식: “한 번만 보고 점프!” (1) 어떻게 계산하나? 현재 시점 t t t 에서 y ( t ) 를 알고 있다고 합시다. 미분방정식 d y d t = f ( t , y ) 를 통해, “지금 이 순간의 기울기(slope)”인 f ( t , y ) 를 구합니다. 그 기울기를 그대로 써서 Δ t 만큼 뻗어나가 봅니다. y ( t + Δ t ) ≈ y ( t ) + f ( t , y ( t ) ) × Δ t  이제 시점을 t + Δ t t 으로 옮겨, 이 값을 새로운 y 로 삼습니다. (2) 비유: “직선 하나로 대충 예측하기” 비유...