style(copy): replace math jargon with plain Korean — 7F.1
This commit is contained in:
@@ -290,7 +290,7 @@ function DashboardBody() {
|
||||
|
||||
<MasteryCopy>
|
||||
<MasteryDescription>
|
||||
전체 학습 태그 중 <code>P ≥ 0.9</code> 도달 비율
|
||||
전체 학습 태그 중 숙련 기준(90%) 도달 비율
|
||||
</MasteryDescription>
|
||||
<MasteryMeta>
|
||||
<Icon name="check-circle" weight="fill" size={14} />
|
||||
@@ -342,7 +342,7 @@ function DashboardBody() {
|
||||
? '복습 경로 계산 대기 중'
|
||||
: `${Math.ceil(item.daysToTarget)}일 + ${item.iterationsToTarget}회 복습 후 마스터 예상`}
|
||||
</MasteryEta>
|
||||
<MasteryNow>현재 P={item.currentP.toFixed(2)}</MasteryNow>
|
||||
<MasteryNow>현재 예상 정답률 {Math.round(item.currentP * 100)}%</MasteryNow>
|
||||
</MasteryRight>
|
||||
</MasteryItem>
|
||||
))
|
||||
|
||||
@@ -148,7 +148,7 @@ export default function OnboardingPage() {
|
||||
<IntensityLabel>{meta.label}</IntensityLabel>
|
||||
<IntensityDesc>{meta.desc}</IntensityDesc>
|
||||
<IntensityThreshold>
|
||||
P ≤ {(meta.threshold * 100).toFixed(0)}%
|
||||
예상 정답률 {(meta.threshold * 100).toFixed(0)}% 이하
|
||||
</IntensityThreshold>
|
||||
</IntensityOption>
|
||||
);
|
||||
|
||||
@@ -29,7 +29,7 @@ const featureItems = [
|
||||
strike: '수능 과목별 누적 파악 불가',
|
||||
title: '태그별 숙련도 누적',
|
||||
description:
|
||||
'세부 태그 단위로 P값을 계산해 단순 정오가 아니라 실제로 언제 내 지식이 되는지 마스터리 경로로 보여줍니다.',
|
||||
'세부 태그 단위 예상 정답률을 계산해 단순 정오가 아니라 실제로 언제 내 지식이 되는지 마스터리 경로로 보여줍니다.',
|
||||
},
|
||||
];
|
||||
|
||||
@@ -56,13 +56,13 @@ const steps = [
|
||||
number: '4',
|
||||
icon: 'chart-line-up' as const,
|
||||
title: '곡선 성장',
|
||||
description: '마스터리 도달 예측 확률(P)이 상승하며 완전한 내 지식이 됨',
|
||||
description: '숙련도와 예상 정답률이 함께 올라가며 완전한 내 지식이 됨',
|
||||
},
|
||||
];
|
||||
|
||||
const stats = [
|
||||
{ value: '150,000', label: '누적 학습 기록 건수' },
|
||||
{ value: '92%', label: '적중률(P≥0.9 시 정답률)' },
|
||||
{ value: '92%', label: '숙련 기준(90%) 도달 시 정답률' },
|
||||
{ value: '45', label: '평균 일일 복습 문항 수' },
|
||||
];
|
||||
|
||||
@@ -81,7 +81,7 @@ const pricingCards = [
|
||||
badge: '가장 인기',
|
||||
features: [
|
||||
'과목 무제한',
|
||||
'마스터리 경로 뷰 (P값)',
|
||||
'마스터리 경로 뷰와 예상 정답률',
|
||||
'기출 문제집 자동 연동',
|
||||
'PDF 업로드 및 분석',
|
||||
],
|
||||
@@ -245,7 +245,7 @@ export default function LandingPage() {
|
||||
<MetricValue>
|
||||
64 <span>%</span>
|
||||
</MetricValue>
|
||||
<MetricHint>전체 태그 중 P≥0.9 도달</MetricHint>
|
||||
<MetricHint>전체 태그 중 숙련 기준(90%) 도달</MetricHint>
|
||||
</MetricCard>
|
||||
</DashboardGrid>
|
||||
</DashboardSurface>
|
||||
|
||||
@@ -70,7 +70,7 @@ const tiers: Tier[] = [
|
||||
features: [
|
||||
'학습 과목 무제한 등록',
|
||||
'평가원/교육청 기출 문제집 연동',
|
||||
'마스터리 경로 뷰와 P값 예측',
|
||||
'마스터리 경로 뷰와 예상 정답률 예측',
|
||||
'PDF 문제 이미지 업로드',
|
||||
'과목별 상세 분석 리포트',
|
||||
'데이터 내보내기와 알림 위젯',
|
||||
|
||||
@@ -463,7 +463,7 @@ export default function ReviewPage() {
|
||||
</SubjectBadge>
|
||||
<MetaBadge>{currentItem.iteration + 1}회차</MetaBadge>
|
||||
<MetaBadge $tone="accent">
|
||||
P={formatProbability(currentItem.predictedP)}
|
||||
예상 정답률 {Math.round((currentItem.predictedP ?? 0) * 100)}%
|
||||
</MetaBadge>
|
||||
</CardTagRow>
|
||||
|
||||
@@ -523,7 +523,7 @@ export default function ReviewPage() {
|
||||
|
||||
<PMeter>
|
||||
<PMeterLabel>
|
||||
<span>예측 회상도</span>
|
||||
<span>예상 정답률</span>
|
||||
<strong>{Math.round((currentItem.predictedP ?? 0) * 100)}%</strong>
|
||||
</PMeterLabel>
|
||||
<PMeterTrack aria-hidden>
|
||||
@@ -635,10 +635,6 @@ function formatRelative(date: Date): string {
|
||||
return `${Math.round(hours / 24)}일 지남`;
|
||||
}
|
||||
|
||||
function formatProbability(value: number | null): string {
|
||||
return (value ?? 0).toFixed(2);
|
||||
}
|
||||
|
||||
const Page = styled.div`
|
||||
min-height: 100vh;
|
||||
background: ${theme.color.bgDeep};
|
||||
|
||||
@@ -458,7 +458,7 @@ function MasteryGrowthPanel({
|
||||
마스터리 성장 곡선
|
||||
</PanelTitle>
|
||||
<PanelDescription>
|
||||
대표 태그의 P-value 성장 경로.
|
||||
대표 태그의 숙련도 성장 경로.
|
||||
</PanelDescription>
|
||||
</PanelTitleGroup>
|
||||
|
||||
@@ -637,7 +637,7 @@ function CurveChart({
|
||||
x: event.clientX,
|
||||
y: event.clientY,
|
||||
title: point.label,
|
||||
subtitle: `P ${point.p.toFixed(2)}`,
|
||||
subtitle: `예상 정답률 ${Math.round(point.p * 100)}%`,
|
||||
})
|
||||
}
|
||||
onMouseLeave={onHideTooltip}
|
||||
|
||||
@@ -554,7 +554,9 @@ function SubjectsBody() {
|
||||
autoFocus
|
||||
/>
|
||||
</EditableCell>
|
||||
<PValueText>P={formatPValue(tag.currentP)}</PValueText>
|
||||
<PValueText>
|
||||
예상 정답률 {Math.round((tag.currentP ?? 0) * 100)}%
|
||||
</PValueText>
|
||||
<BarCell>
|
||||
<ProgressTrack>
|
||||
<ProgressFill
|
||||
@@ -586,7 +588,9 @@ function SubjectsBody() {
|
||||
) : (
|
||||
<>
|
||||
<TagName>{tag.name}</TagName>
|
||||
<PValueText>P={formatPValue(tag.currentP)}</PValueText>
|
||||
<PValueText>
|
||||
예상 정답률 {Math.round((tag.currentP ?? 0) * 100)}%
|
||||
</PValueText>
|
||||
<BarCell>
|
||||
<ProgressTrack>
|
||||
<ProgressFill
|
||||
@@ -686,11 +690,6 @@ function getSubjectMastery(subject: SubjectWithTags): number {
|
||||
return values.reduce((sum, value) => sum + value, 0) / values.length;
|
||||
}
|
||||
|
||||
function formatPValue(value: number | null): string {
|
||||
if (typeof value !== 'number' || Number.isNaN(value)) return '0.00';
|
||||
return clamp01(value).toFixed(2);
|
||||
}
|
||||
|
||||
function clamp01(value: number): number {
|
||||
return Math.min(1, Math.max(0, value));
|
||||
}
|
||||
|
||||
@@ -37,7 +37,7 @@ export default function ForgetCurveChart({ data, threshold = 0.5 }: Props) {
|
||||
stroke={theme.color.textMute}
|
||||
tick={{ fontSize: 11 }}
|
||||
label={{
|
||||
value: 'days',
|
||||
value: '일수',
|
||||
position: 'insideBottomRight',
|
||||
offset: -4,
|
||||
fill: theme.color.textMute,
|
||||
@@ -82,7 +82,7 @@ export default function ForgetCurveChart({ data, threshold = 0.5 }: Props) {
|
||||
<Line
|
||||
type="monotone"
|
||||
dataKey="p"
|
||||
name="정답 확률 P"
|
||||
name="예상 정답률"
|
||||
stroke={theme.color.accent2}
|
||||
strokeWidth={2}
|
||||
dot={false}
|
||||
|
||||
@@ -58,7 +58,7 @@ export default function MasteryPathChart({ data }: Props) {
|
||||
}}
|
||||
labelFormatter={(v) => `${v}회차`}
|
||||
formatter={(value: number, name: string) => {
|
||||
if (name === 'p') return [`${value}%`, '정답 확률 P'];
|
||||
if (name === 'p') return [`${value}%`, '예상 정답률'];
|
||||
if (name === 's0') return [`${value}%`, '기억 강도 S₀'];
|
||||
if (name === 'days') return [`${value}일 뒤`, '예상'];
|
||||
return [value, name];
|
||||
|
||||
Reference in New Issue
Block a user