고객 정보 없이 요금제별 사용시간의 분석 방법을 묻고 싶다면 계산에 필요한 관계와 실패 조건을 새 자료로 만들어 보세요. 실제 파일을 읽지 않고 계정 3개·이벤트 6개로 질문과 로컬 확인 절차를 완성해요.
첨부 링크는 이 글의 예제 ZIP으로 연결돼요. 압축을 푼 뒤 링크에 표시된 파일을 열면 입력·코드·완성 자료를 함께 사용할 수 있어요.
원본에서 가져온 행 없이 처음부터 만든 합성 자료예요. Codex가 질문문·코드를 작성하고 2026년 10월 13일 Python 3.12.3에서 실행했어요. 계정표 (ZIP: accounts.csv), 이벤트표 (ZIP: events.csv), 전달할 질문문 (ZIP: question.txt), 코드 (ZIP: analyze.py)를 함께 사용할 수 있어요.

남길 정보는 계산이 달라지는 조건으로 골라요
질문은 ‘요금제별 유효 사용시간’이에요. 이름·연락처는 빼고, 계정 ID로 두 표를 연결하며 한 계정에 이벤트가 여러 개 있다는 관계를 남겨요. 그래야 일대일 병합을 잘못 전제하지 않아요.
| 원래 질문의 구조 | 합성 예제에서 표현한 방법 | 선택 이유 |
|---|---|---|
| 계정은 요금제를 하나 가짐 | S001=basic, S002=pro, S003=basic | 기준표 키의 유일성을 확인해요 |
| 계정 하나에 여러 이벤트 | S001의 E1·E2 | 정상적인 일대다 관계를 남겨요 |
| 수집 중 완전 중복 가능 | E2를 똑같이 한 번 더 넣음 | 중복이 합계를 늘리는지 봐요 |
| 측정 누락과 실제 0분 | E3 빈칸, E5 0분 | 두 상태를 다르게 처리해요 |
| 등록되지 않은 계정 | E4의 S999 | 조인에서 사라질 행을 찾게 해요 |
단위는 분이에요. 실서비스의 시간대·분포·희귀 명칭·자유 메모는 사용하지 않았어요. 따라서 실제 자료에서의 이상 탐지 성능이나 운영 임계값의 적합성을 검증하는 자료로 쓸 수는 없어요.
합성이라는 이름만으로 안전성을 단정하지 않아요. 실제 기록을 변형하면 원본과의 연결 가능성이 남고 조직의 제공 규칙도 적용돼요. NIST의 생성 AI 위험관리 프로파일은 사용 맥락에 맞춘 위험 관리를 다뤄요. 이 글의 작은 예제는 개인정보 보호 인증이나 조직의 외부 제공 승인을 대신하지 않아요.

질문에는 ‘어떻게 계산할지’까지 포함해요
‘이 데이터를 분석해 줘’라고만 요청하면 중복을 지울 기준과 빈칸 처리 방식이 답마다 달라질 수 있어요. 첨부한 질문문은 다음 조건을 명시해요.
계정 기준표의 ID는 유일하고 이벤트는 계정별 다수 행이에요. 동일 이벤트 ID와 내용은 한 번만 계산하고, 같은 ID의 내용이 다르면 중단해 주세요. 미등록 계정과 빈 사용시간은 예외로 분리해요. 0분은 유효한 이벤트로 세어요. 합계와 함께 행 수·예외 수 검사를 보여 주세요.
미등록 계정의 30분은 요금제를 확인할 때까지 예외로 남겨요. 임의로 basic이나 전체 합계에 넣지 않아요. pro의 빈 사용시간도 0분이 아니에요. pro 합계가 없다는 것은 합산할 유효 값이 없다는 뜻이에요.
코드를 같은 폴더에서 python3 analyze.py로 실행하면 basic은 10+20+0=30분, 유효 이벤트는 3행으로 나와요. 나머지 3행은 완전 중복·결측·미등록 계정 한 건씩이에요. 유효 3행과 예외 3행을 더하면 원본 6행이 돼요. 기준표에 같은 계정 키를 넣은 검사에서는 이벤트 복제를 막기 위해 중단됐어요.
요금제가 중간에 바뀐다면 예제의 관계도 바꿔요
S001이 9월 15일 basic에서 pro로 바뀌는 새 합성 조건 (ZIP: dated-synthetic-input.json)을 만들었어요. E1은 9월 10일 10분, E2는 전환일인 9월 15일 20분이에요. 나머지 중복·결측·미등록·0분 조건은 유지했어요. 실제 고객 이력을 변형한 자료가 아니에요.
| 답하려는 질문·조건 | 실제 계산 결과 | 필요한 선택 |
|---|---|---|
| 현재 요금제별 고객의 누적 사용 | pro 30분, basic 0분 | 최신 요금제 기준표 |
| 이벤트 당시 요금제별 사용 | basic 10분, pro 20분 | 계정+유효기간으로 연결 |
| 전환 구간이 비거나 겹침 | 확인된 basic 10분만, E2 20분 보류 | 누락·중복 구간을 먼저 확인 |
현재 고객 구성을 묻는다면 최신 기준표가 맞아요. 당시 요금제의 사용량을 묻는데 최신 표를 쓰면 E1의 10분도 pro로 옮겨져요. 두 질문을 구별한 뒤 합성 예제에도 event_date, valid_from, valid_to를 넣어야 해요. 이 예제는 시작일 포함·종료일 제외로 정해서 전환일 E2를 pro에 배정했어요.
python3 compare_plan_rules.py로 정상 이력과 구간 누락·겹침을 실행한 결과 (ZIP: plan-rule-results.json)를 남겼어요. 시작을 16일로 늦추면 E2가 어느 구간에도 없고, 이전 종료를 16일로 늦추면 두 구간에 걸려요. 둘 다 임의로 첫 행을 고르지 않고 보류했어요. 각 경우 유효행+예외행=6행도 대조했어요. 부분합 10분을 전체 합계로 보고하지 않아요.


원본에 돌아가서는 승인된 내부 환경에서 키·단위·변경 이력의 의미부터 확인해요. 적용 전 확인 절차 (ZIP: local-application-checklist.md)에 따라 원본 행·결측·미연결 수를 기록하고 일부 계정을 손계산해요. 예외가 예상과 다르면 원본이나 오류 메시지를 외부에 보내기보다 해당 관계를 재현하는 새 합성 조건을 만들어요. 이번에는 원본 적용·조직 승인·분포의 대표성을 검증하지 않았어요.
예제 파일을 한 번에 받아 다시 확인해요
이 글의 입력·코드·완성 자료 ZIP을 새 폴더에 풀면 R15/README.txt, replay.py, assets 폴더가 함께 생겨요. 개별 코드 파일만 저장하면 보조 모듈이나 입력이 빠질 수 있으므로 처음에는 이 묶음을 사용하세요. R15 폴더에서 다음 명령을 실행하면 본문에 사용한 검사를 순서대로 수행해요.
python3 replay.py
확인할 결과는 기본30분·유효3/예외3, 기간 귀속10/20분예요. 명령이 성공해도 이 값과 본문의 적용 범위를 함께 대조하세요. 실행 안내 (ZIP: README.txt)에 필요한 파일과 개별 명령을 적었어요. 실행 코드는 analyze.py (ZIP: analyze.py) · compare_plan_rules.py (ZIP: compare_plan_rules.py)에서 직접 볼 수 있어요. Python3.12의 표준 라이브러리를 사용하며, 명령이 실패하면 ZIP의 폴더 구조와 오류에 나온 파일부터 확인해요. 실제 앱 실행에 필요한 프로그램은 원래 설명을 따르세요.
작성·확인: Codex가 예제 자료와 초안을 작성하고 본문에 명시한 원문 대조·계산·자동 검사를 수행했어요. 별도 사람의 사용성 검증은 하지 않았어요.
합성 예제에서 확인한 병합 규칙을 더 점검하려면 중복 키와 미연결 행 확인로 이어서 확인할 수 있어요.
설명 삽화 2장은 GPT로 생성한 개념 설명이에요. 실제 예제의 작업 화면과 실행 결과는 기존 그림·첨부 자료에서 따로 확인할 수 있어요.