세 가지 질문에 답하고 나면, '당신의 명언, 오늘의 말, 그리고 부드러운 의식'을 고르기 위해 보이지 않는 곳에서 무슨 일이 일어날까요?
에고그램 분석이 어떻게 작동하는지, 그리고 하루의 '흔들림'이 어떻게 설계되어 있는지를 구현에 충실하게 설명합니다.
'시작'을 누르고 세 가지 질문에 답하면, 내부에서 다음과 같은 과정이 이 순서대로 진행됩니다.
에고그램 분석은 STEP 1에서 '마음의 지도'를 만들고, 그 지도가 STEP 2와 STEP 3을 모두 이끌어 줍니다.
다시 말해, 에고그램은 전체 과정의 토대입니다.
이 앱은 교류분석에서 영감을 얻은 자체적인 다섯 요소로 '지금 당신의 마음이 기울어진 방향'을 나타냅니다. 각 요소는 0〜100의 범위를 가지며, 모두 균형 잡힌 중간점 50에서 출발합니다.
| 기호 | 이름 | 의미 |
|---|---|---|
| CP | 원칙 | 엄격함, 이상, 책임감(나는 어떠하고 싶은가) |
| NP | 수용 | 다정함, 공감, 품어 주는 힘 |
| A | 분석 | 논리, 관찰, 현실 검증 |
| FC | 호기심 | 자유로움, 즐거움, 영감 |
| AC | 조화 | 적응, 배려, 인내 |
각 질문의 두 선택지에는 다섯 요소에 대한 변화(델타)가 각각 부여되어 있습니다. '무엇을 고르는가'가 마음의 지도를 조금씩 그려 나갑니다.
세 가지 답변을 하나로 합쳐 지수이동평균(EMA)으로 프로필을 갱신합니다. 급격하게 변하기보다는, 과거를 이어 가면서 '최근의 경향'을 부드럽게 반영하는 방식입니다.
todayScore=50으로 다루어져 부드럽게 50에 가까워집니다(= 오래된 치우침이 자연스럽게 옅어집니다).이 '마음의 지도(프로필)'가 다음 STEP 2와 STEP 3을 움직이는 유일한 입력입니다. 이것이 에고그램 분석의 핵심입니다.
각 명언은 다섯 요소에 대한 친화도를 지니고 있습니다(예: 어떤 명언은 {CP:0.7, A:0.5, FC:0.3}일 수 있습니다). 이를 마음의 지도가 보여 주는 '기울어진 방향'과 견주어 봅니다.
프로필에서 50을 빼서 '중심에서 어느 쪽으로 기울었는가'를 나타내는 벡터로 만든 뒤, 명언의 친화도 벡터와의 코사인 유사도(방향의 가까움, −1〜+1)를 측정합니다. 핵심은 크기가 아니라 방향을 본다는 점이며, 그래서 '지금 당신의 마음이 향하는 방향'과 공명하는 명언이 높은 점수를 받습니다.
점수 상위 8개의 명언을 가져와 소프트맥스(온도 0.15) 가중치로 하나를 뽑습니다. 가장 가까운 명언 하나로 고정하는 대신, 가까울수록 등장할 가능성은 높아지지만 결코 보장되지는 않는 — '운명의 감각'을 간직한 확률적 추첨입니다. 마음의 지도가 완전히 균일할 때는 균등 추첨으로 되돌아갑니다.
요컨대: 명언의 방향이 지금 당신의 마음이 기운 방향에 가까울수록 등장할 가능성이 높아집니다. 다만 최근에 본 것은 피하며, 추첨은 상위 후보들 가운데에서 이루어집니다.
날짜로 결정되는 해시가 hash("quote-shadow|date") % 7 < 2(약 2/7, 일주일에 대략 이틀)를 만족할 때는 '그림자 프로필'을 사용해 명언을 고릅니다. 그림자 프로필은 각 요소를 중간점 50을 기준으로 거울처럼 뒤집으므로(mirror[f] = 100 − profile[f]), 지금 낮은 요소 — 평소에는 시야 밖에 머무는 것들이 높은 것으로 다루어집니다.
그 결과, 평소와 다른 각도에서 깊이 공명하는 명언이 당신의 '운명의 카드'로 찾아옵니다. 예를 들어 어느 날, 호기심(FC)이 높은 사람에게 조화(AC)나 분석(A)에 닿는 명언이 조용히 나타나, 통찰이나 부드러운 주의, 또는 부족한 부분을 채워 주는 무언가를 건넬 수 있습니다. 쿨다운과 상위 8개에서의 소프트맥스 샘플링은 여전히 적용되므로, 잡음이 아니라 정성껏 고른 한 구절의 명언으로 남습니다. 말로 건네는 부분(오늘의 말)은 여느 때의 당신의 목소리를 유지하므로, 흔들리는 명언을 부드럽게 받아들일 수 있습니다.
이 흐름은 '목소리의 흔들림'과는 독립된 날짜 해시로 결정되므로, 둘이 반드시 같은 날에 겹치지는 않습니다.
명언의 해설('해설 읽기' 텍스트)은 그 명언에 결합된 고정 텍스트입니다. 알고리즘이 고르는 것이 아니라 처음부터 고른 명언에 붙어 있습니다. 따라서 어떤 명언이 나타날 때마다 언제나 같은 해설이 표시됩니다(명언 하나당 해설 하나).
이 둘은 '명언의 주제' × '당신의 요소'의 격자에서 골라집니다. 텍스트는 각 요소마다 마련된 묶음(버킷)에 담겨 있습니다.
고른 명언이 지닌 주제(하나에서 여럿)들 가운데 하나를 고릅니다.
요소를 점수순으로 정렬하고(동점은 오늘의 델타로 안정화 → 고정된 순서), 원칙적으로 가장 위에 있는 요소(지배적 요소)의 목소리로 말합니다. 바로 여기서 아래에 설명하는 '흔들림'이 작동합니다.
해당 버킷 안에서 최근에 보여 준 줄(최대 10개까지 기억)을 제외하고 한 줄을 무작위로 고릅니다. 그것들을 제외해 후보가 남지 않을 때만 반복을 허용합니다. 비어 있는 버킷은 공용 텍스트(_default)로 대체됩니다.
'늘 똑같아서 지루하다'를 막기 위해, 축(당신의 경향)을 그대로 둔 채 여러 단계의 흔들림을 겹쳐 놓습니다.
흔들림 0명언의 그림자 카드 — 이레 중 약 이틀
약 2/7 (일주일에 대략 이틀)은 '그림자 프로필'을 사용해 지금 낮은 요소와 공명하는 명언을 고릅니다. 여느 때의 당신과 다른 요소들로부터, 운명의 카드가 강한 제안을 건넵니다(자세한 내용은 STEP 2의 '4. 명언의 흔들림' 참고). 날짜 해시는 목소리의 흔들림과 독립적입니다.
흔들림 1목소리 요소의 흔들림 — 이레 중 약 이틀
날짜로 결정되는 해시가 hash("voice|date") % 7 < 2를 만족할 때는, 첫 번째 요소 대신 두 번째 순위 요소의 목소리로 말합니다. 확률은 2/7 (약 28.6%, 일주일에 대략 이틀)입니다. '여느 때의 나'를 위한 말과 '또 다른 나'를 위한 말이 번갈아 찾아옵니다. 나머지 닷새가량은 지배적 요소의 목소리를 씁니다.
흔들림 2최근 반복 피하기 — 같은 줄이 곧바로 되풀이되지 않게
오늘의 말과 부드러운 의식은 각각 최근 10개를 기억해 후보에서 제외합니다. 명언은 최근 14일을 제외합니다. 같은 말을 곧바로 다시 만나지 않으므로, 매일 아침이 산뜻하게 유지됩니다(후보가 바닥날 때만 반복을 허용합니다).
흔들림 3확률적 추첨 — 같은 조건에서도 하나의 결과로 고정되지 않게
명언은 상위 8개에서 소프트맥스로 뽑고, 오늘의 말과 부드러운 의식은 버킷 안에서 무작위로 뽑습니다. 같은 조건에서도 결과가 달라지므로, 결코 기계적인 반복이 되지 않습니다.
여기에 더해, 프로필 자체도 STEP 1에서 매일 조금씩 옮겨 가므로, 지배적 요소와 주제, 그리고 당신이 공명하는 명언이 시간에 따라 부드럽게 흘러갑니다. 흔들림은 '진부해지지 않게' 하기 위해 존재하며, 그 빈도는 당신의 경향(축)을 잃지 않도록 절제되게 설계되어 있습니다.
| 항목 | 값 | 의미 |
|---|---|---|
| 요소 범위 / 초깃값 | 0〜100 / 50 | 중간점에서의 편차가 '기울기'를 나타냅니다 |
| EMA 평활 계수 α | 0.15 | 하루의 답변이 결과에 미치는 비중(나머지 85%는 과거) |
| 델타 스케일 | 50 / 6 | 오늘의 델타 ±6이 0〜100을 채웁니다 |
| 명언 쿨다운 | 14일 | 최근에 보여 준 명언을 피하는 기간 |
| 명언 상위 그룹 N | 8개의 명언 | 추첨 대상으로 유지하는 상위 명언의 수 |
| 소프트맥스 온도 | 0.15 | 작을수록 높은 점수에 집중됩니다(운명의 감각의 강도) |
| 명언 그림자 카드 빈도 | 2 / 7 (약 29%) | 지금 낮은 요소와 공명하는 명언을 고르는 날의 비율 |
| 목소리 흔들림 빈도 | 2 / 7 (약 29%) | 두 번째 순위 요소의 목소리로 말하는 날의 비율(그림자 카드와 독립적) |
| 오늘의 말 / 부드러운 의식 최근 반복 피하기 | 각 10개 | 같은 줄이 되풀이되지 않도록 기억하는 수 |
| 라이브러리 크기 | 명언 351 / 오늘의 말 360 / 부드러운 의식 300 | 버킷당 여러 줄을 매일 번갈아 사용 |
이 문서는 앱의 구현(OracleEngine의 ProfileEngine, QuoteSelector, AdviceSelector와 DailyDrawService)을 바탕으로 작성되었습니다. 수치와 규칙은 향후 조정에 따라 바뀔 수 있습니다.