[{"data":1,"prerenderedAt":806},["ShallowReactive",2],{"content-query-50kvPvmC2W":3},{"_path":4,"_dir":5,"_draft":6,"_partial":6,"_locale":7,"title":8,"description":9,"heading":10,"prompt":11,"tags":15,"files":18,"nav":6,"presets":19,"gallery":37,"body":39,"_type":799,"_id":800,"_source":801,"_file":802,"_stem":803,"_extension":804,"sitemap":805},"/tools/lift-chart","tools",false,"","Lift Chart and Gains Chart Generator","Create lift and cumulative gains charts online from Excel or CSV model outputs. Evaluate targeting and campaign efficiency with AI.","Lift Chart Generator",{"prefix":12,"label":13,"placeholder":14},"Generate a lift chart","Describe your model scores and actual outcomes","e.g. predicted score column and binary outcome column (0/1); cumulative gains chart; lift chart by decile; what % of positives are captured in the top 20% of scores?",[16,17],"charts","statistics",true,[20,26,31],{"label":21,"prompt":22,"dataset_url":23,"dataset_title":24,"dataset_citation":25},"Marketing Response Model Lift","Lift and gains chart for a marketing response model: predicted score column and binary response outcome (0/1); cumulative gains chart vs random baseline; lift curve; decile table showing % population, % responses captured, and lift per decile; annotate top-20% lift","https://data.cdc.gov/api/views/iuq5-y9ct/rows.csv?accessType=DOWNLOAD","NHANES Mental Health Assessment","CDC",{"label":27,"prompt":28,"dataset_url":29,"dataset_title":30,"dataset_citation":25},"Lead Score Gains Analysis","Gains chart for lead scoring model: predicted probability column and binary conversion outcome; cumulative gains curve; lift by decile; at what score threshold do we capture 80% of conversions? compare model lift to random and perfect model","https://data.cdc.gov/api/views/dppn-5tm3/rows.csv?accessType=DOWNLOAD","NCHS Health and Nutrition Examination Survey",{"label":32,"prompt":33,"dataset_url":34,"dataset_title":35,"dataset_citation":36},"Health Risk Screening Lift","Lift chart for a health risk prediction model: predicted risk score and binary outcome (high risk = 1); cumulative gains chart; lift at top 10%, 20%, 30% of population; compare to random screening; how many true high-risk individuals are identified if we screen the top 25% by score?","https://ourworldindata.org/grapher/share-of-the-population-with-cancer.csv","Share of Population with Cancer","Our World in Data",[38],"/img/tools/lift-chart.png",{"type":40,"children":41,"toc":788},"root",[42,51,73,99,104,110,167,173,317,322,328,462,468,625,631,675,681,718,724,747,757],{"type":43,"tag":44,"props":45,"children":47},"element","h2",{"id":46},"what-is-a-lift-chart",[48],{"type":49,"value":50},"text","What Is a Lift Chart?",{"type":43,"tag":52,"props":53,"children":54},"p",{},[55,57,63,65,71],{"type":49,"value":56},"A ",{"type":43,"tag":58,"props":59,"children":60},"strong",{},[61],{"type":49,"value":62},"lift chart",{"type":49,"value":64}," (also called a gains chart or cumulative response chart) evaluates how much better a predictive model performs at identifying positive cases compared to random targeting. It answers the question: ",{"type":43,"tag":66,"props":67,"children":68},"em",{},[69],{"type":49,"value":70},"\"If I contact the top X% of people ranked by my model's score, what fraction of all the true positives will I reach — and how does that compare to randomly contacting X% of people?\"",{"type":49,"value":72}," The chart is the standard tool for assessing targeting efficiency in direct marketing, lead prioritization, health screening, and churn prevention — any context where resources limit how many people can be contacted and you want to maximize the return on each outreach.",{"type":43,"tag":52,"props":74,"children":75},{},[76,78,83,85,90,92,97],{"type":49,"value":77},"The ",{"type":43,"tag":58,"props":79,"children":80},{},[81],{"type":49,"value":82},"cumulative gains chart",{"type":49,"value":84}," plots the percentage of the population contacted (x-axis, sorted by descending model score) against the percentage of all positive outcomes captured (y-axis). The ",{"type":43,"tag":58,"props":86,"children":87},{},[88],{"type":49,"value":89},"random baseline",{"type":49,"value":91}," is a diagonal line — randomly contacting 30% of people will capture 30% of positives. A perfect model would show all positives captured within the first X% of the population (where X% equals the base rate). The model's gains curve falls between these extremes — the further above the diagonal, the more the model improves on random targeting. ",{"type":43,"tag":58,"props":93,"children":94},{},[95],{"type":49,"value":96},"Lift",{"type":49,"value":98}," is the ratio of the model's cumulative response rate to the random baseline: lift = 2.5 at the top 20% means the model captures 2.5× as many positives as random selection of the same 20%.",{"type":43,"tag":52,"props":100,"children":101},{},[102],{"type":49,"value":103},"A concrete example: a direct mail campaign targets 10,000 households for a product offer with a 6% base response rate (600 total responders). A logistic regression model scores all households. The top 20% of scored households (2,000 people) contain 43% of all 600 responders — a lift of 2.15× at 20%. This means the campaign budget spent on 2,000 targeted households will reach as many responders as randomly mailing 4,300 households, reducing cost per contact by 53%. The decile table shows that lift falls from 3.4× in the top decile to 1.1× in the 7th decile — below that threshold, the model barely outperforms random, so the budget cutoff should be set at the top 60–70%.",{"type":43,"tag":44,"props":105,"children":107},{"id":106},"how-it-works",[108],{"type":49,"value":109},"How It Works",{"type":43,"tag":111,"props":112,"children":113},"ol",{},[114,125,140],{"type":43,"tag":115,"props":116,"children":117},"li",{},[118,123],{"type":43,"tag":58,"props":119,"children":120},{},[121],{"type":49,"value":122},"Upload your data",{"type":49,"value":124}," — provide a CSV or Excel file with one row per individual, a numeric score column (model-predicted probability or score), and a binary outcome column (1 = positive, 0 = negative).",{"type":43,"tag":115,"props":126,"children":127},{},[128,133,135],{"type":43,"tag":58,"props":129,"children":130},{},[131],{"type":49,"value":132},"Describe the analysis",{"type":49,"value":134}," — e.g. ",{"type":43,"tag":66,"props":136,"children":137},{},[138],{"type":49,"value":139},"\"score column = predicted_prob, outcome column = converted; cumulative gains chart; lift chart; decile table with lift per decile; top-20% lift annotation\"",{"type":43,"tag":115,"props":141,"children":142},{},[143,148,150,157,159,165],{"type":43,"tag":58,"props":144,"children":145},{},[146],{"type":49,"value":147},"Get full results",{"type":49,"value":149}," — the AI writes Python code using ",{"type":43,"tag":151,"props":152,"children":154},"a",{"href":153},"https://pandas.pydata.org/",[155],{"type":49,"value":156},"pandas",{"type":49,"value":158}," and ",{"type":43,"tag":151,"props":160,"children":162},{"href":161},"https://plotly.com/python/",[163],{"type":49,"value":164},"Plotly",{"type":49,"value":166}," to sort by score, compute cumulative gains and lift, generate both charts, and produce a decile-level summary table",{"type":43,"tag":44,"props":168,"children":170},{"id":169},"required-data-format",[171],{"type":49,"value":172},"Required Data Format",{"type":43,"tag":174,"props":175,"children":176},"table",{},[177,201],{"type":43,"tag":178,"props":179,"children":180},"thead",{},[181],{"type":43,"tag":182,"props":183,"children":184},"tr",{},[185,191,196],{"type":43,"tag":186,"props":187,"children":188},"th",{},[189],{"type":49,"value":190},"Column",{"type":43,"tag":186,"props":192,"children":193},{},[194],{"type":49,"value":195},"Description",{"type":43,"tag":186,"props":197,"children":198},{},[199],{"type":49,"value":200},"Example",{"type":43,"tag":202,"props":203,"children":204},"tbody",{},[205,248,284],{"type":43,"tag":182,"props":206,"children":207},{},[208,219,224],{"type":43,"tag":209,"props":210,"children":211},"td",{},[212],{"type":43,"tag":213,"props":214,"children":216},"code",{"className":215},[],[217],{"type":49,"value":218},"score",{"type":43,"tag":209,"props":220,"children":221},{},[222],{"type":49,"value":223},"Model-predicted probability or score",{"type":43,"tag":209,"props":225,"children":226},{},[227,233,235,241,242],{"type":43,"tag":213,"props":228,"children":230},{"className":229},[],[231],{"type":49,"value":232},"0.82",{"type":49,"value":234},", ",{"type":43,"tag":213,"props":236,"children":238},{"className":237},[],[239],{"type":49,"value":240},"0.34",{"type":49,"value":234},{"type":43,"tag":213,"props":243,"children":245},{"className":244},[],[246],{"type":49,"value":247},"0.91",{"type":43,"tag":182,"props":249,"children":250},{},[251,260,265],{"type":43,"tag":209,"props":252,"children":253},{},[254],{"type":43,"tag":213,"props":255,"children":257},{"className":256},[],[258],{"type":49,"value":259},"outcome",{"type":43,"tag":209,"props":261,"children":262},{},[263],{"type":49,"value":264},"Binary actual outcome",{"type":43,"tag":209,"props":266,"children":267},{},[268,274,276,282],{"type":43,"tag":213,"props":269,"children":271},{"className":270},[],[272],{"type":49,"value":273},"1",{"type":49,"value":275}," (positive) or ",{"type":43,"tag":213,"props":277,"children":279},{"className":278},[],[280],{"type":49,"value":281},"0",{"type":49,"value":283}," (negative)",{"type":43,"tag":182,"props":285,"children":286},{},[287,296,301],{"type":43,"tag":209,"props":288,"children":289},{},[290],{"type":43,"tag":213,"props":291,"children":293},{"className":292},[],[294],{"type":49,"value":295},"id",{"type":43,"tag":209,"props":297,"children":298},{},[299],{"type":49,"value":300},"Optional: individual identifier",{"type":43,"tag":209,"props":302,"children":303},{},[304,310,311],{"type":43,"tag":213,"props":305,"children":307},{"className":306},[],[308],{"type":49,"value":309},"C1234",{"type":49,"value":234},{"type":43,"tag":213,"props":312,"children":314},{"className":313},[],[315],{"type":49,"value":316},"lead_99",{"type":43,"tag":52,"props":318,"children":319},{},[320],{"type":49,"value":321},"Any column names work — describe them in your prompt. Scores do not need to be calibrated probabilities — any numeric ranking works (higher = more likely positive). If you have multiple models to compare, include a score column per model.",{"type":43,"tag":44,"props":323,"children":325},{"id":324},"interpreting-the-results",[326],{"type":49,"value":327},"Interpreting the Results",{"type":43,"tag":174,"props":329,"children":330},{},[331,347],{"type":43,"tag":178,"props":332,"children":333},{},[334],{"type":43,"tag":182,"props":335,"children":336},{},[337,342],{"type":43,"tag":186,"props":338,"children":339},{},[340],{"type":49,"value":341},"Output",{"type":43,"tag":186,"props":343,"children":344},{},[345],{"type":49,"value":346},"What it means",{"type":43,"tag":202,"props":348,"children":349},{},[350,366,382,398,414,430,446],{"type":43,"tag":182,"props":351,"children":352},{},[353,361],{"type":43,"tag":209,"props":354,"children":355},{},[356],{"type":43,"tag":58,"props":357,"children":358},{},[359],{"type":49,"value":360},"Cumulative gains curve",{"type":43,"tag":209,"props":362,"children":363},{},[364],{"type":49,"value":365},"% of positives captured vs % of population contacted; higher = better model",{"type":43,"tag":182,"props":367,"children":368},{},[369,377],{"type":43,"tag":209,"props":370,"children":371},{},[372],{"type":43,"tag":58,"props":373,"children":374},{},[375],{"type":49,"value":376},"Random baseline",{"type":43,"tag":209,"props":378,"children":379},{},[380],{"type":49,"value":381},"Diagonal line — what random targeting would achieve",{"type":43,"tag":182,"props":383,"children":384},{},[385,393],{"type":43,"tag":209,"props":386,"children":387},{},[388],{"type":43,"tag":58,"props":389,"children":390},{},[391],{"type":49,"value":392},"Lift at top N%",{"type":43,"tag":209,"props":394,"children":395},{},[396],{"type":49,"value":397},"(% positives captured in top N%) / N% — how many times better than random",{"type":43,"tag":182,"props":399,"children":400},{},[401,409],{"type":43,"tag":209,"props":402,"children":403},{},[404],{"type":43,"tag":58,"props":405,"children":406},{},[407],{"type":49,"value":408},"Decile table",{"type":43,"tag":209,"props":410,"children":411},{},[412],{"type":49,"value":413},"Population divided into 10 equal groups by score; shows count, response rate, and lift per decile",{"type":43,"tag":182,"props":415,"children":416},{},[417,425],{"type":43,"tag":209,"props":418,"children":419},{},[420],{"type":43,"tag":58,"props":421,"children":422},{},[423],{"type":49,"value":424},"Optimal cutoff",{"type":43,"tag":209,"props":426,"children":427},{},[428],{"type":49,"value":429},"The score threshold where lift drops to 1.0 — below this, the model adds no value over random",{"type":43,"tag":182,"props":431,"children":432},{},[433,441],{"type":43,"tag":209,"props":434,"children":435},{},[436],{"type":43,"tag":58,"props":437,"children":438},{},[439],{"type":49,"value":440},"Area under gains curve",{"type":43,"tag":209,"props":442,"children":443},{},[444],{"type":49,"value":445},"Summary of overall model value for targeting; larger area = more efficient model",{"type":43,"tag":182,"props":447,"children":448},{},[449,457],{"type":43,"tag":209,"props":450,"children":451},{},[452],{"type":43,"tag":58,"props":453,"children":454},{},[455],{"type":49,"value":456},"Break-even reach",{"type":43,"tag":209,"props":458,"children":459},{},[460],{"type":49,"value":461},"% of population to contact to capture a target % of all positives",{"type":43,"tag":44,"props":463,"children":465},{"id":464},"example-prompts",[466],{"type":49,"value":467},"Example Prompts",{"type":43,"tag":174,"props":469,"children":470},{},[471,487],{"type":43,"tag":178,"props":472,"children":473},{},[474],{"type":43,"tag":182,"props":475,"children":476},{},[477,482],{"type":43,"tag":186,"props":478,"children":479},{},[480],{"type":49,"value":481},"Scenario",{"type":43,"tag":186,"props":483,"children":484},{},[485],{"type":49,"value":486},"What to type",{"type":43,"tag":202,"props":488,"children":489},{},[490,507,523,540,557,574,591,608],{"type":43,"tag":182,"props":491,"children":492},{},[493,498],{"type":43,"tag":209,"props":494,"children":495},{},[496],{"type":49,"value":497},"Basic lift chart",{"type":43,"tag":209,"props":499,"children":500},{},[501],{"type":43,"tag":213,"props":502,"children":504},{"className":503},[],[505],{"type":49,"value":506},"score column = pred_score, outcome = converted; cumulative gains chart; lift curve; top-20% lift",{"type":43,"tag":182,"props":508,"children":509},{},[510,514],{"type":43,"tag":209,"props":511,"children":512},{},[513],{"type":49,"value":408},{"type":43,"tag":209,"props":515,"children":516},{},[517],{"type":43,"tag":213,"props":518,"children":520},{"className":519},[],[521],{"type":49,"value":522},"decile analysis: 10 equal groups by score; count, response count, response rate, cumulative lift per decile",{"type":43,"tag":182,"props":524,"children":525},{},[526,531],{"type":43,"tag":209,"props":527,"children":528},{},[529],{"type":49,"value":530},"Budget optimization",{"type":43,"tag":209,"props":532,"children":533},{},[534],{"type":43,"tag":213,"props":535,"children":537},{"className":536},[],[538],{"type":49,"value":539},"if budget allows contacting 30% of population, how many positives are captured vs random?",{"type":43,"tag":182,"props":541,"children":542},{},[543,548],{"type":43,"tag":209,"props":544,"children":545},{},[546],{"type":49,"value":547},"Model comparison",{"type":43,"tag":209,"props":549,"children":550},{},[551],{"type":43,"tag":213,"props":552,"children":554},{"className":553},[],[555],{"type":49,"value":556},"compare lift curves for 3 models (logistic, random forest, gradient boost); plot on same chart",{"type":43,"tag":182,"props":558,"children":559},{},[560,565],{"type":43,"tag":209,"props":561,"children":562},{},[563],{"type":49,"value":564},"Optimal threshold",{"type":43,"tag":209,"props":566,"children":567},{},[568],{"type":43,"tag":213,"props":569,"children":571},{"className":570},[],[572],{"type":49,"value":573},"at what score threshold does lift drop below 1.5? what % of positives are captured at that point?",{"type":43,"tag":182,"props":575,"children":576},{},[577,582],{"type":43,"tag":209,"props":578,"children":579},{},[580],{"type":49,"value":581},"Campaign ROI",{"type":43,"tag":209,"props":583,"children":584},{},[585],{"type":43,"tag":213,"props":586,"children":588},{"className":587},[],[589],{"type":49,"value":590},"at top 25% reach: compare cost of outreach ($2/contact) vs expected revenue ($50/conversion) with model vs random",{"type":43,"tag":182,"props":592,"children":593},{},[594,599],{"type":43,"tag":209,"props":595,"children":596},{},[597],{"type":49,"value":598},"Perfect model",{"type":43,"tag":209,"props":600,"children":601},{},[602],{"type":43,"tag":213,"props":603,"children":605},{"className":604},[],[606],{"type":49,"value":607},"add perfect model curve to gains chart; what is the maximum achievable gain at 20% reach?",{"type":43,"tag":182,"props":609,"children":610},{},[611,616],{"type":43,"tag":209,"props":612,"children":613},{},[614],{"type":49,"value":615},"Quintile breakdown",{"type":43,"tag":209,"props":617,"children":618},{},[619],{"type":43,"tag":213,"props":620,"children":622},{"className":621},[],[623],{"type":49,"value":624},"quintile (5-group) analysis; response rate and lift per quintile; bar chart of response rate by quintile",{"type":43,"tag":44,"props":626,"children":628},{"id":627},"assumptions-to-check",[629],{"type":49,"value":630},"Assumptions to Check",{"type":43,"tag":632,"props":633,"children":634},"ul",{},[635,645,655,665],{"type":43,"tag":115,"props":636,"children":637},{},[638,643],{"type":43,"tag":58,"props":639,"children":640},{},[641],{"type":49,"value":642},"Score calibration",{"type":49,"value":644}," — lift charts require only that scores correctly rank individuals from most to least likely positive — absolute calibration (scores equaling true probabilities) is not required; a model with poor calibration but good rank ordering will still produce a valid lift chart",{"type":43,"tag":115,"props":646,"children":647},{},[648,653],{"type":43,"tag":58,"props":649,"children":650},{},[651],{"type":49,"value":652},"Sufficient positive cases",{"type":49,"value":654}," — lift charts become noisy when the number of actual positives is small; with fewer than 50 positives, the decile-level lift estimates have high variance and individual decile results should not be over-interpreted; use a coarser breakdown (quintiles) with small positive counts",{"type":43,"tag":115,"props":656,"children":657},{},[658,663],{"type":43,"tag":58,"props":659,"children":660},{},[661],{"type":49,"value":662},"No data leakage",{"type":49,"value":664}," — the model scores used for the lift chart must be out-of-sample predictions (from a held-out test set), not in-sample predictions from the training data; in-sample lift charts overstate model performance because the model was optimized on the same data",{"type":43,"tag":115,"props":666,"children":667},{},[668,673],{"type":43,"tag":58,"props":669,"children":670},{},[671],{"type":49,"value":672},"Stable base rate",{"type":49,"value":674}," — lift charts assume the base rate in the population being targeted equals the base rate in the data used to build the chart; if you built the model on a 50/50 balanced sample but the real population has 5% base rate, the lift chart must be recalculated at the actual deployment base rate",{"type":43,"tag":44,"props":676,"children":678},{"id":677},"related-tools",[679],{"type":49,"value":680},"Related Tools",{"type":43,"tag":52,"props":682,"children":683},{},[684,686,692,694,700,702,708,710,716],{"type":49,"value":685},"Use the ",{"type":43,"tag":151,"props":687,"children":689},{"href":688},"/tools/roc-curve",[690],{"type":49,"value":691},"ROC Curve and AUC Calculator",{"type":49,"value":693}," for a threshold-independent evaluation of model discrimination that complements the lift chart — AUC summarizes overall ranking ability while the lift chart quantifies targeting efficiency at specific reach levels. Use the ",{"type":43,"tag":151,"props":695,"children":697},{"href":696},"/tools/lead-scoring-model",[698],{"type":49,"value":699},"Lead Scoring Model",{"type":49,"value":701}," to build the predictive model whose scores are then evaluated with the lift chart. Use the ",{"type":43,"tag":151,"props":703,"children":705},{"href":704},"/tools/confusion-matrix",[706],{"type":49,"value":707},"Confusion Matrix & Sensitivity Specificity Calculator",{"type":49,"value":709}," to evaluate model performance at a fixed classification threshold rather than across all thresholds. Use the ",{"type":43,"tag":151,"props":711,"children":713},{"href":712},"/tools/ab-test-calculator",[714],{"type":49,"value":715},"A/B Test Calculator",{"type":49,"value":717}," to validate that model-targeted campaigns actually outperform random targeting in production.",{"type":43,"tag":44,"props":719,"children":721},{"id":720},"frequently-asked-questions",[722],{"type":49,"value":723},"Frequently Asked Questions",{"type":43,"tag":52,"props":725,"children":726},{},[727,732,734,739,741,745],{"type":43,"tag":58,"props":728,"children":729},{},[730],{"type":49,"value":731},"What is the difference between a lift chart and an ROC curve?",{"type":49,"value":733},"\nBoth evaluate predictive model performance, but they answer different operational questions. The ",{"type":43,"tag":58,"props":735,"children":736},{},[737],{"type":49,"value":738},"ROC curve",{"type":49,"value":740}," (TPR vs FPR) evaluates a model's discrimination ability across all possible thresholds, independent of the base rate. The ",{"type":43,"tag":58,"props":742,"children":743},{},[744],{"type":49,"value":62},{"type":49,"value":746}," shows targeting efficiency at each reach level in the actual deployment population — it directly answers \"how much better is the model than random for a given budget?\" The lift chart is more directly actionable for campaign planning; the ROC curve is better for comparing models independent of the base rate. For a 6% base rate target population, the ROC curve and lift chart can diverge significantly — a model with high AUC may still have modest lift if the score distribution is not sufficiently separated.",{"type":43,"tag":52,"props":748,"children":749},{},[750,755],{"type":43,"tag":58,"props":751,"children":752},{},[753],{"type":49,"value":754},"How do I use a lift chart to set a campaign budget?",{"type":49,"value":756},"\nFind the point on the lift curve where marginal lift drops to approximately 1.0 (the model no longer outperforms random). The corresponding x-axis value is your efficient reach ceiling — contacting more people beyond this point yields no benefit from the model. For a business constraint like a fixed budget, find the x-axis value corresponding to your affordable reach (e.g., budget covers 25% of population), read off the y-axis to see how many positives you'll capture, and multiply by conversion value to estimate ROI. The decile table makes this calculation explicit: each decile shows the expected response count and lift, so you can sum deciles until you hit your budget.",{"type":43,"tag":52,"props":758,"children":759},{},[760,765,767,772,774,779,781,786],{"type":43,"tag":58,"props":761,"children":762},{},[763],{"type":49,"value":764},"My model has high AUC but low lift at the top decile — is something wrong?",{"type":49,"value":766},"\nThis can happen when: (1) ",{"type":43,"tag":58,"props":768,"children":769},{},[770],{"type":49,"value":771},"the base rate is very low",{"type":49,"value":773}," — with 1% base rate, even a good model may only score a lift of 3–4 in the top decile because the number of true positives is small; (2) ",{"type":43,"tag":58,"props":775,"children":776},{},[777],{"type":49,"value":778},"the score distribution is diffuse",{"type":49,"value":780}," — many individuals cluster near the same score, so the top decile is not clearly separated; (3) ",{"type":43,"tag":58,"props":782,"children":783},{},[784],{"type":49,"value":785},"the model is overfit",{"type":49,"value":787}," — high training AUC but lower test set lift indicates overfitting; check that scores are from a held-out test set. If AUC is genuinely high but lift is low, inspect the score histogram — if most scores fall between 0.45 and 0.55, the model is not providing strong differentiation despite reasonable ranking ability.",{"title":7,"searchDepth":789,"depth":789,"links":790},2,[791,792,793,794,795,796,797,798],{"id":46,"depth":789,"text":50},{"id":106,"depth":789,"text":109},{"id":169,"depth":789,"text":172},{"id":324,"depth":789,"text":327},{"id":464,"depth":789,"text":467},{"id":627,"depth":789,"text":630},{"id":677,"depth":789,"text":680},{"id":720,"depth":789,"text":723},"markdown","content:tools:089.lift-chart.md","content","tools/089.lift-chart.md","tools/089.lift-chart","md",{"loc":4},1775502475455]