YAML Metadata Warning: empty or missing yaml metadata in repo card (https://huggingface.co/docs/hub/model-cards#model-card-metadata)

์‹œ๊ณ„์—ด ์ƒ์‚ฐ์žฌ๊ณ  ์˜ˆ์ธก ์šฉ ์‹œ๊ณ„์—ด ๋ชจ๋ธ ์นด๋“œ

๋ชจ๋ธ ์„ธ๋ถ€์‚ฌํ•ญ

๋ชจ๋ธ ์„ค๋ช…

์ด ๋ชจ๋ธ์€ ์‹œ๊ณ„์—ด ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ œ์กฐ ํ™˜๊ฒฝ์—์„œ ์žฌ๊ณ  ์ˆ˜์ค€์„ ์˜ˆ์ธกํ•˜๊ธฐ ์œ„ํ•ด ์„ค๊ณ„๋˜์—ˆ์Šต๋‹ˆ๋‹ค. Conv1D ๋ ˆ์ด์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์‹œ๊ณ„์—ด ๋ฐ์ดํ„ฐ์—์„œ ๋กœ์ปฌ ํŠน์ง•์„ ์ถ”์ถœํ•˜๊ณ , BiLSTM ๋ ˆ์ด์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์‹œ๊ฐ„์  ์˜์กด์„ฑ์„ ์บก์ฒ˜ํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ชจ๋ธ์€ ์—ญ์‚ฌ์  ์žฌ๊ณ  ๋ฐ์ดํ„ฐ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ›ˆ๋ จ๋˜์–ด ๋ฏธ๋ž˜์˜ ์žฌ๊ณ  ์ˆ˜์ค€์„ ์˜ˆ์ธกํ•ฉ๋‹ˆ๋‹ค.

  • Developed by: ๋‹ค์–ด๋ฐ˜๊ถŒ ์ˆ˜์„์—ฐ๊ตฌ์›
  • Funded by: 4INLAB INC.
  • Shared by: None
  • Model type: Conv1D + BiLSTM, LSTM, GRU, Transformer ๋“ฑ ์‹œ๊ณ„์—ด ๋ชจ๋ธ
  • Language(s): Python
  • License: Apache 2.0, MIT

๊ธฐ์ˆ ์  ์ œํ•œ์‚ฌํ•ญ

  • ์ด ๋ชจ๋ธ์€ ๊ณผ๊ฑฐ์˜ ์žฌ๊ณ  ํŒจํ„ด์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฏธ๋ž˜์˜ ์žฌ๊ณ  ์ˆ˜์ค€์„ ์˜ˆ์ธกํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜์ง€๋งŒ, ์—ญ์‚ฌ์  ํŠธ๋ Œ๋“œ์—์„œ ๊ทน๋‹จ์ ์ธ ํŽธ์ฐจ๊ฐ€ ๋ฐœ์ƒํ•  ๊ฒฝ์šฐ ์„ฑ๋Šฅ์ด ์ข‹์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋ชจ๋ธ์ด ์ ์ ˆํžˆ ํŠœ๋‹๋˜์ง€ ์•Š์œผ๋ฉด ๊ณผ์ ํ•ฉ์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ํŠนํžˆ ์ž‘์€ ๋ฐ์ดํ„ฐ์…‹์—์„œ ๊ทธ ์œ„ํ—˜์ด ํฝ๋‹ˆ๋‹ค.

ํ•™์Šต ์„ธ๋ถ€์‚ฌํ•ญ

Hardware

  • CPU: Intel Core i9-13900K (24 Cores, 32 Threads)
  • RAM: 64GB DDR5
  • GPU: NVIDIA RTX 4090Ti 24GB
  • Storage: 1TB NVMe SSD + 2TB HDD
  • Operating System: Windows 10/11

๋ฐ์ดํ„ฐ์…‹ ์ •๋ณด

์ด ๋ชจ๋ธ์€ ์‹œ๊ณ„์—ด ์žฌ๊ณ  ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ›ˆ๋ จ๋ฉ๋‹ˆ๋‹ค. ์ด ๋ฐ์ดํ„ฐ๋Š” ์žฌ๊ณ  ์ˆ˜์ค€, ๋‚ ์งœ ๋ฐ ๊ธฐํƒ€ ๊ด€๋ จ ํŠน์„ฑ์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ํฌํ•จํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ๋Š” Conv1D์™€ BiLSTM ๋ ˆ์ด์–ด์— ์ ํ•ฉํ•˜๋„๋ก MinMax ์Šค์ผ€์ผ๋ง์„ ์‚ฌ์šฉํ•˜์—ฌ ์ „์ฒ˜๋ฆฌ๋˜๊ณ  ์ •๊ทœํ™”๋ฉ๋‹ˆ๋‹ค.

  • Data sources: https://huggingface.co/datasets/quandao92/stock-prediction-training

  • Training size:

    File Number_of_Rows Number_of_Columns Missing_Values Mean Std Min Max Column_Types
    37510-P0100_์žฌ๊ณ ๋Ÿ‰.csv 1445 4 0 {'Input': 109.58546712802769, 'Output': 101.29411764705883, 'Stock': -2785.61937716263} {'Input': 296.68724811803355, 'Output': 128.93657312491547, 'Stock': 3673.0239542642976} {'Input': 0.0, 'Output': 0.0, 'Stock': -12332.0} {'Input': 1729.0, 'Output': 895.0, 'Stock': 1415.0} {'TransactionDate': dtype('O'), 'Input': dtype('float64'), 'Output': dtype('float64'), 'Stock': dtype('float64')}
    37596-P4000_์žฌ๊ณ ๋Ÿ‰.csv 1444 4 0 {'Input': 243.54570637119113, 'Output': 193.6045706371191, 'Stock': 65925.12603878116} {'Input': 561.4023180438826, 'Output': 267.2823694340497, 'Stock': 23051.799134789908} {'Input': 0.0, 'Output': 0.0, 'Stock': 822.0} {'Input': 3144.0, 'Output': 1781.0, 'Stock': 84493.0} {'TransactionDate': dtype('O'), 'Input': dtype('float64'), 'Output': dtype('float64'), 'Stock': dtype('float64')}
    42778765_์žฌ๊ณ ๋Ÿ‰.csv 774 4 0 {'Input': 157.62119576526158, 'Output': 134.12325678375972, 'Stock': 21012.84792653769} {'Input': 309.7029075361264, 'Output': 205.82601027621517, 'Stock': 8195.925470131109} {'Input': 0.0, 'Output': 0.0, 'Stock': 0.0} {'Input': 1957.0, 'Output': 1111.0, 'Stock': 54371.0} {'TransactionDate': dtype('O'), 'Input': dtype('float64'), 'Output': dtype('float64'), 'Stock': dtype('float64')}
    55421-AAAA0_์žฌ๊ณ ๋Ÿ‰.csv 1200 4 0 {'Input': 125.32457616887791, 'Output': 97.88425219845885, 'Stock': 20212.689789475586} {'Input': 256.1219037042129, 'Output': 183.9228577283981, 'Stock': 11837.50158296252} {'Input': 0.0, 'Output': 0.0, 'Stock': 1350.0} {'Input': 1804.0, 'Output': 1200.0, 'Stock': 29582.0} {'TransactionDate': dtype('O'), 'Input': dtype('float64'), 'Output': dtype('float64'), 'Stock': dtype('float64')}
    55421-AABA0_์žฌ๊ณ ๋Ÿ‰.csv 1250 4 0 {'Input': 98.34576759722834, 'Output': 70.54873633255685, 'Stock': 16385.024626397156} {'Input': 213.2654482193094, 'Output': 142.22319426176325, 'Stock': 9579.189939026907} {'Input': 0.0, 'Output': 0.0, 'Stock': 1125.0} {'Input': 1740.0, 'Output': 1040.0, 'Stock': 27895.0} {'TransactionDate': dtype('O'), 'Input': dtype('float64'), 'Output': dtype('float64'), 'Stock': dtype('float64')}
    55421-N9000_์žฌ๊ณ ๋Ÿ‰.csv 1445 4 0 {'Input': 85.21289544065527, 'Output': 82.34580005067112, 'Stock': 9456.364574084605} {'Input': 217.3122037461521, 'Output': 141.24411875413377, 'Stock': 5892.23272801921} {'Input': 0.0, 'Output': 0.0, 'Stock': 300.0} {'Input': 1204.0, 'Output': 876.0, 'Stock': 23148.0} {'TransactionDate': dtype('O'), 'Input': dtype('float64'), 'Output': dtype('float64'), 'Stock': dtype('float64')}
    55421-N9050_์žฌ๊ณ ๋Ÿ‰.csv 1210 4 0 {'Input': 312.7681487750148, 'Output': 279.5602341694698, 'Stock': 42335.17973164216} {'Input': 423.5547606438498, 'Output': 217.1073984704094, 'Stock': 18953.32711711572} {'Input': 0.0, 'Output': 0.0, 'Stock': 880.0} {'Input': 3087.0, 'Output': 1605.0, 'Stock': 76533.0} {'TransactionDate': dtype('O'), 'Input': dtype('float64'), 'Output': dtype('float64'), 'Stock': dtype('float64')}
    55422-AABA0_์žฌ๊ณ ๋Ÿ‰.csv 1180 4 0 {'Input': 65.2345562187494, 'Output': 50.45123576220381, 'Stock': 9232.392694569597} {'Input': 171.0524036426813, 'Output': 111.47922267422175, 'Stock': 4921.795351820058} {'Input': 0.0, 'Output': 0.0, 'Stock': 560.0} {'Input': 1253.0, 'Output': 675.0, 'Stock': 21143.0} {'TransactionDate': dtype('O'), 'Input': dtype('float64'), 'Output': dtype('float64'), 'Stock': dtype('float64')}
    55432-AR000_์žฌ๊ณ ๋Ÿ‰.csv 1380 4 0 {'Input': 103.78255213511757, 'Output': 93.34193353827462, 'Stock': 5032.346523768436} {'Input': 212.26512201649207, 'Output': 143.27490752827104, 'Stock': 7647.890356211703} {'Input': 0.0, 'Output': 0.0, 'Stock': 850.0} {'Input': 1572.0, 'Output': 860.0, 'Stock': 20115.0} {'TransactionDate': dtype('O'), 'Input': dtype('float64'), 'Output': dtype('float64'), 'Stock': dtype('float64')}
    60005413_์žฌ๊ณ ๋Ÿ‰.csv 772 4 0 {'Input': 578.6904145077721, 'Output': 3.312176165803109, 'Stock': -155098.99222797927} {'Input': 1310.3599375858219, 'Output': 36.298012893342275, 'Stock': 143702.6483818438} {'Input': 0.0, 'Output': 0.0, 'Stock': -341943.0} {'Input': 6019.0, 'Output': 764.0, 'Stock': 102122.0} {'TransactionDate': dtype('O'), 'Input': dtype('float64'), 'Output': dtype('float64'), 'Stock': dtype('float64')}
    62421-59000_์žฌ๊ณ ๋Ÿ‰.csv 1594 4 0 {'Input': 8.989335006273526, 'Output': 8.554579673776663, 'Stock': 142.7904642409034} {'Input': 69.94193995489978, 'Output': 57.03142684688043, 'Stock': 412.6341468153742} {'Input': 0.0, 'Output': 0.0, 'Stock': -637.0} {'Input': 888.0, 'Output': 600.0, 'Stock': 1277.0} {'TransactionDate': dtype('O'), 'Input': dtype('float64'), 'Output': dtype('float64'), 'Stock': dtype('float64')}
    62422-AR000_์žฌ๊ณ ๋Ÿ‰.csv 743 4 0 {'Input': 216.86271870717274, 'Output': 218.25330750569382, 'Stock': 1828.890223547734} {'Input': 660.9764647303546, 'Output': 171.5429683741239, 'Stock': 14663.755822690066} {'Input': 0.0, 'Output': 0.0, 'Stock': -10588.0} {'Input': 5389.0, 'Output': 2445.0, 'Stock': 48551.0} {'TransactionDate': dtype('O'), 'Input': dtype('float64'), 'Output': dtype('float64'), 'Stock': dtype('float64')}
    62431-59000_์žฌ๊ณ ๋Ÿ‰.csv 1630 4 0 {'Input': 9.530674846625766, 'Output': 8.221472392638036, 'Stock': 1286.2036809815952} {'Input': 70.29446075739038, 'Output': 61.33528025808465, 'Stock': 616.5563598411729} {'Input': 0.0, 'Output': 0.0, 'Stock': 1.0} {'Input': 743.0, 'Output': 740.0, 'Stock': 2824.0} {'TransactionDate': dtype('O'), 'Input': dtype('float64'), 'Output': dtype('float64'), 'Stock': dtype('float64')}
    62441-AR000_์žฌ๊ณ ๋Ÿ‰.csv 1469 4 0 {'Input': 182.52212389380531, 'Output': 92.61538461538461, 'Stock': -67074.5901974132} {'Input': 538.5965745495109, 'Output': 114.81806391548116, 'Stock': 41312.24229452366} {'Input': 0.0, 'Output': 0.0, 'Stock': -130309.0} {'Input': 3336.0, 'Output': 684.0, 'Stock': 2780.0} {'TransactionDate': dtype('O'), 'Input': dtype('float64'), 'Output': dtype('float64'), 'Stock': dtype('float64')}
    62456-AR000_์žฌ๊ณ ๋Ÿ‰.csv 1468 4 0 {'Input': 186.05735554008376, 'Output': 112.28379613804371, 'Stock': 22810.539147026034} {'Input': 608.1109490482561, 'Output': 150.0210573567845, 'Stock': 22782.16359247917} {'Input': 0.0, 'Output': 0.0, 'Stock': -21432.0} {'Input': 4209.0, 'Output': 946.0, 'Stock': 113546.0} {'TransactionDate': dtype('O'), 'Input': dtype('float64'), 'Output': dtype('float64'), 'Stock': dtype('float64')}
    B5110-CN000_์žฌ๊ณ ๋Ÿ‰.csv 1733 4 0 {'Input': 92.54991344489325, 'Output': 20.79919215233699, 'Stock': -66490.28967109059} {'Input': 309.9338591928675, 'Output': 61.683063312208745, 'Stock': 43044.891729171395} {'Input': 0.0, 'Output': 0.0, 'Stock': -121809.0} {'Input': 2826.0, 'Output': 650.0, 'Stock': 1967.0} {'TransactionDate': dtype('O'), 'Input': dtype('float64'), 'Output': dtype('float64'), 'Stock': dtype('float64')}
    BU110-GI900_์žฌ๊ณ ๋Ÿ‰.csv 297 4 0 {'Input': 411.05387205387206, 'Output': 373.5656565656566, 'Stock': 4327.20202020202} {'Input': 648.276402767596, 'Output': 516.147871154793, 'Stock': 2672.106758087619} {'Input': 0.0, 'Output': 0.0, 'Stock': 560.0} {'Input': 3846.0, 'Output': 1851.0, 'Stock': 12782.0} {'TransactionDate': dtype('O'), 'Input': dtype('float64'), 'Output': dtype('float64'), 'Stock': dtype('float64')}
    V_6000-5218_45_์žฌ๊ณ ๋Ÿ‰.csv 627 4 0 {'Input': 42.39712918660287, 'Output': 1.0446570972886762, 'Stock': -2920.3317384370016} {'Input': 94.78046025788936, 'Output': 8.666039405615116, 'Stock': 7392.24161303543} {'Input': 0.0, 'Output': 0.0, 'Stock': -16030.0} {'Input': 1114.0, 'Output': 135.0, 'Stock': 9820.0} {'TransactionDate': dtype('O'), 'Input': dtype('float64'), 'Output': dtype('float64'), 'Stock': dtype('float64')}
  • Features: Historical inventory data

  • Time-step: 1 day

๋ชจ๋ธ ์•„ํ‚คํ…์ฒ˜

  • Input Layer: Conv1D layer with 128 filters and kernel size of 3.

  • Hidden Layers:

    • Conv1D followed by MaxPooling1D.
    • Bidirectional LSTM layer with 128 units.
    • Dropout layers to prevent overfitting.
    • A second Bidirectional LSTM layer with 64 units.
    • A Dense layer for the final prediction.
  • Optimizer: Adam optimizer.

  • Loss Function: Mean Squared Error (MSE).

  • Metrics: Mean Absolute Error (MAE), SMAPE.

ํ•™์Šต ํŒŒ๋ฆฌ๋ฏธ

  • Learning rate: 0.001
  • Batch size: 64
  • Epochs: 50
  • Time step: 30
  • Dropout: 0.1
  • Early stopping: Enabled with a patience of 10 epochs

ํ‰๊ฐ€ ์ง€ํ‘œ

  • Accuracy: Percentage of correct predictions.
  • MAE (Mean Absolute Error): Measures the average magnitude of errors in the predictions.
  • SMAPE (Symmetric Mean Absolute Percentage Error): Measures prediction accuracy in percentage.

ํ•™์Šต ์„ฑ๋Šฅ ๋ฐ ํ…Œ์ŠคํŠธ ๊ฒฐ๊ณผ ์˜ˆ์‹œ

  • ํ•™์Šต ๋ฐ ๊ฒ€์ฆ ์†์‹ค ๊ทธ๋ž˜ํ”„:

  • ํ•™์Šต ๊ฒฐ๊ณผํ‘œ: image/png

  • ํ…Œ์ŠคํŠธ ๊ฒฐ๊ณผ ๊ทธ๋ž˜ํ”„:

๋ชจ๋ธ ์ด๋ ฅ ๊ด€๋ฆฌ

1์ฐจ๋…„๋„์— ๊ตฌ์ถ•ํ•œ ์ƒ์‚ฐ์žฌ๊ณ  ์˜ˆ์ธก ๋ชจ๋ธ์˜ ์„ฑ๋Šฅ์€ ์ดˆ๊ธฐ ๊ฐ€๊ณต์ด๋ ฅ ๊ธฐ๋ฐ˜ ๋‹จ๋ณ€๋Ÿ‰ ์˜ˆ์ธก ์ˆ˜์ค€์— ๋จธ๋ฌผ๋ €๊ณ , ์‹ค์ œ ์šด์˜ ์ ์šฉ ์‹œ ์ •ํ™•๋„ ํŽธ์ฐจ์™€ ๋ชจ๋ธ ์„ ํƒ ๊ธฐ์ค€์˜ ๋ถˆ๋ช…ํ™•์„ฑ์ด ์กด์žฌํ–ˆ์Šต๋‹ˆ๋‹ค.
์ด์— ๋”ฐ๋ผ 2์ฐจ๋…„๋„์—๋Š” ๋‹ค์–‘ํ•œ ๋”ฅ๋Ÿฌ๋‹ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์‹คํ—˜(CNN-BLSTM, Bi-LSTM, LSTM, GRU, Transformer)์„ ํ†ตํ•ด ์ •ํ™•๋„ ๊ณ ๋„ํ™”, ๋ชจ๋ธ ์•ˆ์ •์„ฑ ํ™•๋ณด, ํ•™์Šต ์ด๋ ฅ ๊ด€๋ฆฌ์ฒด๊ณ„ ๊ตฌ์ถ•์„ ๋ชฉํ‘œ๋กœ ๊ณ ๋„ํ™”๋ฅผ ์ˆ˜ํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค.

์žฌํ•™์Šต ์ด๋ ฅ ๋ฐ ์„ฑ๋Šฅ ์ถ”์ด

๋™์ผํ•œ ์ „์ฒ˜๋ฆฌ ๊ทœ๊ฒฉ(MinMaxScaler, window=30), ๊ณตํ†ต ๋Ÿฌ๋‹๋ ˆ์ดํŠธ(0.001), Optimizer=Adam ๊ธฐ์ค€.
๊ฐ ์‹คํ—˜์€ ๋™์ผ Seed๋กœ 1ํšŒ ์ธก์ •(ํ•„์š” ์‹œ 3ํšŒ ํ‰๊ท  ๊ถŒ์žฅ).

์žฌํ•™์Šต ์ผ์ž ๋ชจ๋ธ ๋ฒˆํ˜ธ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ •ํ™•๋„(%) Epoch ์ˆ˜ Learning Rate Optimizer ํŠน์ด์‚ฌํ•ญ
2025-09-07 3 Transformer 92.10 500 0.001 Adam ์•ˆ์ •์  ์„ฑ๋Šฅ ์œ ์ง€
2025-08-28 2 Transformer 92.30 700 0.001 Adam ์žฅ๊ธฐ ์•ˆ์ •ํ™” ๊ตฌ๊ฐ„
2025-08-15 1 Transformer 90.70 600 0.001 Adam Tranformer ๋ชจ๋ธ ๋ณ€๊ฒฝ
2025-07-23 9 CNN-BLSTM 91.50 600 0.001 Adam ์œ ์ง€์„ฑ ๊ฒ€์ฆ ์žฌํ•™์Šต
2025-07-03 8 CNN-BLSTM 90.70 600 0.001 Adam LSTM ๊ณ„์—ด ๋น„๊ต ํ…Œ์ŠคํŠธ
2025-06-17 7 CNN-BLSTM 91.10 600 0.001 Adam ์˜ˆ์ธก ์•ˆ์ • ์œ ์ง€
2025-05-25 6 CNN-BLSTM 91.90 700 0.001 Adam ์ตœ๊ณ  ์„ฑ๋Šฅ(์ƒ๋ฐ˜๊ธฐ)
2025-05-03 2 GRU 91.30 500 0.001 Adam ๋‹จ๊ธฐ ์ƒ์Šน์„ธ
2025-04-25 17 Bi-LSTM 90.10 600 0.001 Adam ์•ˆ์ •์  ์ˆ˜๋ ด
2025-04-08 16 Bi-LSTM 89.70 600 0.001 Adam LSTM ๋Œ€๋น„ ๋ฏธ์„ธ ํ–ฅ์ƒ
2025-03-17 6 LSTM 88.60 600 0.001 Adam ๊ธฐ๋ณธ LSTM ๋ชจ๋ธ ํ…Œ์ŠคํŠธ
2025-03-08 4 GRU 86.20 600 0.001 Adam ์ •ํ™•๋„ ์ผ์‹œ์  ํ•˜๋ฝ
2025-02-26 14 Bi-LSTM 88.50 600 0.001 Adam ์ผ๋ฐ˜ ํ•™์Šต ๋‹จ๊ณ„
2025-02-15 12 Bi-LSTM 87.50 700 0.001 Adam ํ•™์Šต ์•ˆ์ •ํ™” ์ค‘
2025-02-04 11 Bi-LSTM 87.20 600 0.001 Adam ์ „์ฒ˜๋ฆฌ ํŒŒ๋ผ๋ฏธํ„ฐ ๋ณ€๊ฒฝ
2025-01-26 5 CNN-BLSTM 88.10 500 0.001 Adam ์ดˆ๊ธฐ ํ…Œ์ŠคํŠธ(baseline)

๋ถ„์„ ์š”์•ฝ

  • ์ •ํ™•๋„ ๋ถ„ํฌ: 86.2% ~ 92.3% (ํ‘œ์— ๊ธฐ์žฌ๋œ 17ํšŒ ๊ธฐ์ค€) โ†’ ์ „๋ฐ˜์ ์œผ๋กœ ์•ˆ์ •์ 
  • Epoch ์ˆ˜์™€ ์ •ํ™•๋„ ๊ฐ„ ์ง์ ‘ ์ƒ๊ด€๊ด€๊ณ„๋Š” ๋ฏธ์•ฝ
  • CNN-BLSTM/GRU๊ฐ€ ๋‹จ๊ธฐ ์˜ˆ์ธก ์ •ํ™•๋„์—์„œ ์šฐ์ˆ˜ ๊ฒฝํ–ฅ

ํ•™์Šต ์„ค์ • ์š”์•ฝ (๊ณตํ†ต ํŒŒ๋ผ๋ฏธํ„ฐ ๊ธฐ์ค€)

  • ๋ฐ์ดํ„ฐ ์ „์ฒ˜๋ฆฌ: MinMaxScaler(ํ”ผ์ฒ˜๋ณ„), ๊ฒฐ์ธก์น˜ 0๊ฑด ๊ธฐ์ค€ / ์‹œ๊ณ„์—ด ์œˆ๋„์šฐ time_step=30
  • ๋ชจ๋ธ ๊ตฌ์กฐ: Conv1D โ†’ MaxPool1D โ†’ (Bi-LSTM or LSTM/GRU) ร— 1~2 โ†’ Dropout โ†’ Dense(Output)
  • Optimizer: Adam (lr=0.001)
  • Loss: MSE (ํšŒ๊ท€ ๊ธฐ์ค€)
  • Metrics: MAE, sMAPE, (์šด์˜์ง€ํ‘œ) Accuracy%
  • ํ•™์Šต ์Šค์ผ€์ค„: epochs=500~700, batch_size=64, EarlyStopping(patience=10)
  • ๊ฒ€์ฆ ์ „๋žต: Train/Val/Test = 70/15/15, ๋™์ผ Seed ๊ณ ์ •, ๋™์ผ Split ์žฌ์‚ฌ์šฉ
  • ์žฌํ˜„์„ฑ/์•„์นด์ด๋ธŒ:
    • artifacts/<algo>/<yyyymmdd_modelNo>/์— metrics.json, loss_curve.png, run_config.yaml, weights(sha256) ์ €์žฅ
    • README์˜ ํ‘œ๋Š” metrics.json์„ ๊ธฐ์ค€์œผ๋กœ ์ฃผ๊ธฐ์  ์—…๋ฐ์ดํŠธ

์šด์˜ ๋ฐ˜์˜ ์‹œ, ๊ฐ€์žฅ ์ตœ์‹ ์˜ **์•ˆ์ •ํŒ(CNN-BLSTM ๊ณ„์—ด)**์„ ๊ธฐ๋ณธ ์„ ํƒํ•˜๋˜,
๋‹จ๊ธฐ ๊ธ‰๋ณ€ ๊ตฌ๊ฐ„(ํ”„๋กœ๋ชจ์…˜/๊ณ„์ ˆ ์ „ํ™˜)์—๋Š” GRU ๋ณด์กฐ ๋ชจ๋ธ์„ A/B ํ…Œ์ŠคํŠธ ์˜ต์…˜์œผ๋กœ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

์„ค์น˜ ๋ฐ ์‹คํ–‰ ๊ฐ€์ด๋ผ์ธ

์ด ๋ชจ๋ธ์„ ์‹คํ–‰ํ•˜๋ ค๋ฉด Python๊ณผ ํ•จ๊ป˜ ๋‹ค์Œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค:

  • pandas: ๋ฐ์ดํ„ฐ ์กฐ์ž‘ ๋ฐ ๋ถ„์„.
  • numpy: ์ˆ˜์น˜ ์—ฐ์‚ฐ.
  • matplotlib: ๋ฐ์ดํ„ฐ ์‹œ๊ฐํ™” (์˜ˆ: ํ›ˆ๋ จ ๋ฐ ๊ฒ€์ฆ ์†์‹ค ๊ทธ๋ž˜ํ”„).
  • scikit-learn: ๋ฐ์ดํ„ฐ ์ „์ฒ˜๋ฆฌ ๋ฐ ํ‰๊ฐ€ ์ง€ํ‘œ.
  • keras: ๋”ฅ๋Ÿฌ๋‹ ๋ชจ๋ธ (Conv1D + BiLSTM) ๊ตฌ์ถ• ๋ฐ ํ›ˆ๋ จ.
  • tensorflow: Keras์˜ ๋ฐฑ์—”๋“œ.
  • gputil: GPU ์ƒํƒœ ๋ฐ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰ ํ™•์ธ.
  • psutil: ์‹œ์Šคํ…œ ๋ฐ ํ”„๋กœ์„ธ์Šค ์œ ํ‹ธ๋ฆฌํ‹ฐ (๋ชจ๋‹ˆํ„ฐ๋ง์šฉ ์„ ํƒ ์‚ฌํ•ญ).
  • torchsummary: ๋ชจ๋ธ ์š”์•ฝ ์ถœ๋ ฅ (์„ ํƒ ์‚ฌํ•ญ

๋ชจ๋ธ ์‹คํ–‰ ๋‹จ๊ณ„:

1. ํ•„์š”ํ•œ ํŒจํ‚ค์ง€ ์„ค์น˜

pip์„ ํ†ตํ•ด ํ•„์š”ํ•œ ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

pip install pandas numpy matplotlib scikit-learn keras tensorflow gputil psutil torchsummary

2. ๋ฐ์ดํ„ฐ ๋กœ๋“œ

  • pandas ๋˜๋Š” ์ ์ ˆํ•œ ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ์…‹์„ ๋กœ๋“œํ•˜์„ธ์š”.

3. ๋ฐ์ดํ„ฐ ์ „์ฒ˜๋ฆฌ

  • MinMaxScaler๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ์Šค์ผ€์ผ๋งํ•˜๊ณ  ์žฌ๊ณ  ๊ฐ’์„ 0๊ณผ 1 ์‚ฌ์ด๋กœ ์ •๊ทœํ™”ํ•ฉ๋‹ˆ๋‹ค.
  • Conv1D-BiLSTM ๋ชจ๋ธ์— ์‚ฌ์šฉํ•  ์‹œ๊ฐ„ ๋‹จ๊ณ„๋ณ„ ๋ฐ์ดํ„ฐ์…‹์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

4. ์Šคํฌ๋ฆฝํŠธ ์‹คํ–‰

  • ๋ฐ์ดํ„ฐ๋ฅผ ํ›ˆ๋ จ ์„ธํŠธ์™€ ํ…Œ์ŠคํŠธ ์„ธํŠธ๋กœ ๋ถ„ํ• ํ•ฉ๋‹ˆ๋‹ค.
  • LSTM ๋ชจ๋ธ์— ๋งž๊ฒŒ ์ž…๋ ฅ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณ€ํ˜•ํ•ฉ๋‹ˆ๋‹ค.
  • ๋ชจ๋ธ์„ ๋นŒ๋“œํ•˜๊ณ  ํ›ˆ๋ จ์‹œํ‚ต๋‹ˆ๋‹ค.
  • ํ…Œ์ŠคํŠธ ๋ฐ์ดํ„ฐ์—์„œ ๋ชจ๋ธ์„ ํ‰๊ฐ€ํ•˜๊ณ  ์„ฑ๋Šฅ์„ ์‹œ๊ฐํ™”ํ•ฉ๋‹ˆ๋‹ค.

์˜คํ”ˆ์†Œ์Šค ๋ผ์ด๋ธŒ๋ฆฌ ๋ณด์•ˆยท๋ผ์ด์„ ์Šค ๊ด€๋ฆฌ

๊ฐœ์š”

๋ณธ ํ”„๋กœ์ ํŠธ๋Š” Python ๊ธฐ๋ฐ˜ ๋”ฅ๋Ÿฌ๋‹ ํ”„๋ ˆ์ž„์›Œํฌ(TensorFlow, Keras, scikit-learn, NumPy, Pandas ๋“ฑ) ์˜คํ”ˆ์†Œ์Šค๋ฅผ ํ™œ์šฉํ•˜์—ฌ ๊ฐœ๋ฐœ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
๋‚ด๋ถ€๋ง(On-premise) ํ™˜๊ฒฝ์—์„œ๋„ ์˜คํ”ˆ์†Œ์Šค์˜ ๋ณด์•ˆ ์ทจ์•ฝ์ (CVE) ๋ฐ ๋ผ์ด์„ ์Šค ์˜๋ฌด ๋ถˆ์ดํ–‰์€
๋ฒ•์  ๋ถ„์Ÿ ๋ฐ ์„œ๋น„์Šค ์ค‘๋‹จ์œผ๋กœ ์ด์–ด์งˆ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ, ์•„๋ž˜์™€ ๊ฐ™์€ ๊ด€๋ฆฌ์ฒด๊ณ„๋ฅผ ์ ์šฉํ•ฉ๋‹ˆ๋‹ค.


1. ์œ„ํ—˜ ์ง„์ˆ  (Risk Statement)

  • ๋ณด์•ˆ ์œ„ํ—˜: ์™ธ๋ถ€ ์˜คํ”ˆ์†Œ์Šค ํŒจํ‚ค์ง€์—์„œ ๋ฐœ๊ฒฌ๋˜๋Š” ์ทจ์•ฝ์ (CVE)์— ์˜ํ•ด
    ์•…์„ฑ ์ฝ”๋“œ ์‹คํ–‰, ๋ฐ์ดํ„ฐ ์œ ์ถœ, ๋ชจ๋ธ ๋ฌด๊ฒฐ์„ฑ ํ›ผ์† ๊ฐ€๋Šฅ์„ฑ์ด ์กด์žฌํ•จ.
  • ๋ฒ•์  ์œ„ํ—˜: Apache 2.0, MIT ๋“ฑ ๋ผ์ด์„ ์Šค ๊ณ ์ง€๋ฅผ ๋ˆ„๋ฝํ•˜๊ฑฐ๋‚˜ GPL ๊ณ„์—ด ๋ผ์ด์„ ์Šค๋ฅผ ์˜ค์šฉํ•  ๊ฒฝ์šฐ,
    ์†Œ์Šค ๊ณต๊ฐœ ์š”๊ตฌยท๋ฐฐํฌ ์ œํ•œยท๋ฒ•์  ๋ถ„์Ÿ ๋ฐœ์ƒ ์œ„ํ—˜.
  • ์šด์˜ ์œ„ํ—˜: SBOM(์†Œํ”„ํŠธ์›จ์–ด ๊ตฌ์„ฑ ๋ช…์„ธ์„œ) ๋ฏธ๋น„, ๋ฒ„์ „ ๊ด€๋ฆฌ ๋ถ€์žฌ๋กœ ์ธํ•œ
    ์žฌํ˜„ ๋ถˆ๊ฐ€, ๋ณด์•ˆ ๊ฐ์‚ฌ ๋Œ€์‘ ์‹คํŒจ, ๊ณต๊ธ‰๋ง ์œ„ํ˜‘(Supply Chain Attack) ๊ฐ€๋Šฅ์„ฑ.

2. ์ ์šฉ ๋ฒ”์œ„ (Scope)

๊ตฌ๋ถ„ ๋ฒ”์œ„
์ฝ”๋“œ ํ•™์Šต/์ถ”๋ก  ํŒŒ์ดํ”„๋ผ์ธ, ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ ์Šคํฌ๋ฆฝํŠธ
๋ชจ๋ธ Conv1D + BiLSTM ํ•™์Šต ๊ฒฐ๊ณผ(๊ฐ€์ค‘์น˜, ์ฒดํฌํฌ์ธํŠธ, ๋ชจ๋ธ ํŒŒ์ผ)
๋ฐ์ดํ„ฐ ์›์ฒœ ์žฌ๊ณ  ์‹œ๊ณ„์—ด ๋ฐ์ดํ„ฐ ๋ฐ ์ „์ฒ˜๋ฆฌ ์‚ฐ์ถœ๋ฌผ
ํ™˜๊ฒฝ ๋‚ด๋ถ€๋ง ์„œ๋ฒ„(ํ•™์Šต/์ถ”๋ก ), ํ”Œ๋žซํผ UI ๋ฐ ๋ฐฐ์น˜ ์„œ๋ฒ„
๋ฌธ์„œ ๋ชจ๋ธ ์นด๋“œ, ๋งค๋‰ด์–ผ, ๋ฐฐํฌ ๊ธฐ๋ก, ๋ผ์ด์„ ์Šค ๊ณ ์ง€ ํŒŒ์ผ

3. ๊ฑฐ๋ฒ„๋„Œ์Šค ์ •์ฑ… (Governance Policy)

  • ๋ผ์ด์„ ์Šค ํ—ˆ์šฉ ๊ธฐ์ค€
๊ตฌ๋ถ„ ๋ผ์ด์„ ์Šค ํ—ˆ์šฉ ์—ฌ๋ถ€ ์ฃผ์š” ์˜๋ฌด
โœ… MIT, BSD-2/3, Apache-2.0 ํ—ˆ์šฉ ์ €์ž‘๊ถŒ/๋ผ์ด์„ ์Šค ๊ณ ์ง€, Apache-2.0์€ NOTICE ํฌํ•จ
โš ๏ธ MPL-2.0, EPL-2.0, LGPL ์กฐ๊ฑด๋ถ€ ํ—ˆ์šฉ ์ˆ˜์ • ํŒŒ์ผ ๊ณต๊ฐœ ๋ฒ”์œ„ ๊ฒ€ํ† 
โ›” GPL-2.0/3.0, AGPL-3.0 ๊ธˆ์ง€ ๋‚ด๋ถ€ ์„œ๋น„์Šค๋ผ๋„ ๊ณต๊ฐœ ์˜๋ฌด ๊ฐ€๋Šฅ
โš ๏ธ CC-BY, CC-BY-SA ์กฐ๊ฑด๋ถ€ ์ถœ์ฒ˜ ํ‘œ๊ธฐ, ๋™์ผ์กฐ๊ฑด๋ฐฐํฌ(ShareAlike) ํ™•์ธ
  • ๋ฐ˜์ž… ์ ˆ์ฐจ
    1. ํŒจํ‚ค์ง€/๋ฐ์ดํ„ฐ/๋ชจ๋ธ ๋ฐ˜์ž… ์ „ โ†’ ๋‚ด๋ถ€ ์Šน์ธ ์š”์ฒญ
    2. SCA(Software Composition Analysis) ์Šค์บ” ์ˆ˜ํ–‰ (์˜ˆ: OSV-Scanner, Trivy)
    3. ๊ฒฐ๊ณผ ๊ธฐ๋ก ๋ฐ โ€œํ—ˆ์šฉ/์กฐ๊ฑด๋ถ€/๊ฑฐ์ ˆโ€ ๊ฒฐ์ •
    4. ์Šน์ธ๋œ ๋ฒ„์ „๋งŒ ๋‚ด๋ถ€๋ง ์ €์žฅ์†Œ(PyPI Mirror)์— ๋“ฑ๋ก

4. Library requirements.txt ๋ฒ„์ „ ์ด๋ ฅ ๊ด€๋ฆฌ

๋ณธ ํ”„๋กœ์ ํŠธ๋Š” ์˜์กด์„ฑ ์žฌํ˜„์„ฑ๊ณผ ๊ณต๊ธ‰๋ง ๋ณด์•ˆ์„ ์œ„ํ•ด requirements.in โ†’ requirements.txt(ํ•ด์‹œ ํฌํ•จ) โ†’ SBOM ์ˆœ์œผ๋กœ ์ž ๊ธˆ(lock) + ์ด๋ ฅ(History) + ๊ฐ์‚ฌ(Traceability) ๋ฅผ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

1) ๋””๋ ‰ํ„ฐ๋ฆฌ ๊ตฌ์กฐ

/configs/dependency/
โ”œโ”€ base/
โ”‚ โ”œโ”€ requirements.in
โ”‚ โ””โ”€ requirements.txt # ํ•ด์‹œ ํฌํ•จ (pip-compile ์ƒ์„ฑ)
โ”œโ”€ dev/
โ”‚ โ”œโ”€ requirements-dev.in
โ”‚ โ””โ”€ requirements-dev.txt
โ”œโ”€ constraints.txt # ํŒ€ ๊ณตํ†ต ์ œ์•ฝ(์ถฉ๋Œ ๋ฐฉ์ง€/์ƒยทํ•˜ํ•œ)
โ””โ”€ CHANGELOG_requirements.md # ์˜์กด์„ฑ ๋ณ€๊ฒฝ ์ด๋ ฅ

2) ๋ธŒ๋žœ์น˜/ํƒœ๊ทธ ๊ทœ์น™

  • ๋ธŒ๋žœ์น˜: dep/upgrade-YYYYMMDD (์˜ˆ: dep/upgrade-20251021)
  • ํƒœ๊ทธ: deps-vMAJOR.MINOR.PATCH (์˜ˆ: deps-v1.4.2)
  • ์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€ ๊ทœ์น™:
    • deps(lock): pin versions (TF 2.15.0, numpy 1.26.4) + hashes
    • deps(upgrade): pandas 2.2.1 โ†’ 2.2.2 (CVE-XXXX fix)
    • deps(revert): rollback to deps-v1.3.0 due to perf regression

3) ์ด๋ ฅ(CHANGELOG) ํ‘œ๊ธฐ

/configs/dependency/CHANGELOG_requirements.md ์— ๊ธฐ๋ก:

๋‚ ์งœ ํƒœ๊ทธ ๋ณ€๊ฒฝ ์œ ํ˜• ์ฃผ์š” ๋ณ€๊ฒฝ ๊ทผ๊ฑฐ/๋งํฌ ์˜ํ–ฅ
2024-09-25 deps-v0.1.0 pin / initial lock requirements.in โ†’ requirements.txt ์ƒ์„ฑ (--generate-hashes)
tensorflow 2.8.0, numpy 1.22.4, pandas 1.4.2 ๋“ฑ ๊ธฐ๋ณธ ์˜์กด์„ฑ ๊ณ ์ • ๋ฐ ํ•ด์‹œ ํฌํ•จ
๋‚ด๋ถ€ ๋ณด์•ˆ์ •์ฑ…(์ดˆ๊ธฐ ์ž ๊ธˆ) ์˜์กด์„ฑ ์žฌํ˜„์„ฑ ํ™•๋ณด, ๋นŒ๋“œ ์•ˆ์ •ํ™”
2024-10-23 deps-v0.1.1 upgrade pandas 1.4.2 โ†’ 1.4.4, urllib3 1.26.x ๋ณด์•ˆ ํŒจ์น˜ ์ ์šฉ, scikit-learn 1.1.3 โ†’ 1.1.4 ์—…๋ฐ์ดํŠธ SCA ๋ฆฌํฌํŠธ 2024-10 CVE ๋Œ€์‘, ์Šค๋ชจํฌ ํ…Œ์ŠคํŠธ ํ•„์š”
2024-11-21 deps-v0.2.0 upgrade tensorflow 2.8.0 โ†’ 2.9.1 (๋ณด์•ˆํŒจ์น˜ ํฌํ•จ), requests 2.28.1 โ†’ 2.31.0, joblib 1.2.0 โ†’ 1.3.0 OSV Scanner ๊ฒฐ๊ณผ 2024-11 ๋ณด์•ˆ์ทจ์•ฝ์  ํ•ด๊ฒฐ, ํ˜ธํ™˜์„ฑ ๊ฒ€์ฆ ํ•„์š”
2025-01-15 deps-v0.3.0 pin / constraints ์ถ”๊ฐ€ constraints.txt ๋„์ž… (protobuf <5, grpcio <2 ์ œ์•ฝ)
requirements-dev.txt ๋ถ„๋ฆฌ, dev์šฉ ํŒจํ‚ค์ง€ ์ •์˜
๋‚ด๋ถ€ ์˜์กด์„ฑ ์ถฉ๋Œ ๋ถ„์„ Dev/Staging ํ™˜๊ฒฝ ์ผ๊ด€์„ฑ ํ™•๋ณด
2025-02-12 deps-v0.4.0 upgrade numpy 1.22.x โ†’ 1.23.5 ์—…๊ทธ๋ ˆ์ด๋“œ
scikit-learn 1.1.4 โ†’ 1.3.2, pandas 1.4.4 โ†’ 2.1.0
SCA ๋ณด๊ณ ์„œ 2025-02 CVE-2025-XXXX ๋Œ€์‘, ์„ฑ๋Šฅ ์•ฝ๊ฐ„ ํ–ฅ์ƒ
2025-03-18 deps-v1.0.0 upgrade (major) tensorflow 2.10.0์œผ๋กœ ๋ฉ”์ด์ € ์—…๊ทธ๋ ˆ์ด๋“œ
pip-tools 7.x ์ ์šฉ, SBOM ์ƒ์„ฑ ํ”„๋กœ์„ธ์Šค ์ถ”๊ฐ€
OSV/Trivy 2025-03 ๊ฒฐ๊ณผ ๋ณด์•ˆยท์„ฑ๋Šฅ ๋™์‹œ ๊ฐœ์„ , ํ•™์Šต ํ™˜๊ฒฝ ๋ณ€๊ฒฝ
2025-05-21 deps-v1.1.0 revert / stabilization numpy 2.x โ†’ 1.26.4 ํšŒ๊ท€, tensorflow 2.10.0 ์œ ์ง€
pandas 2.1.0 โ†’ 2.2.1 ์—…๋ฐ์ดํŠธ, ํ•ด์‹œ ์žฌ์ƒ์„ฑ
์„ฑ๋Šฅ ํšŒ๊ท€ ํ…Œ์ŠคํŠธ (ํ›ˆ๋ จ ์†๋„ ์ €ํ•˜) ๋ชจ๋ธ ํ•™์Šต ์‹œ๊ฐ„ ๋‹จ์ถ•, ์•ˆ์ •ํ™” ์™„๋ฃŒ
2025-07-23 deps-v1.2.0 pin / maintenance tensorflow 2.10.0 ์œ ์ง€, scikit-learn 1.5.1 ํ™•์ •, cyclonedx 3.x SBOM ๊ฐฑ์‹ 
deps ๋ฌธ์„œ(SBOM, LICENSE NOTICE) ์—…๋ฐ์ดํŠธ
๋‚ด๋ถ€ ์ •๊ธฐ ์ ๊ฒ€ (2025-07) ๋ณด์•ˆยท๋ฒ•์  ๊ฐ์‚ฌ ๋Œ€์‘ ์ค€๋น„ ์™„๋ฃŒ

์›์น™: ๋ชจ๋“  ๋ณ€๊ฒฝ์€ ์™œ ๋ฐ”๊พธ์—ˆ๋Š”์ง€(๊ทผ๊ฑฐ) ์™€ ์˜ํ–ฅ๋„ ๋ฅผ ๊ฐ™์ด ๋‚จ๊น๋‹ˆ๋‹ค.

4) ์Šน๊ฒฉ(Devโ†’Stagingโ†’Prod) ์›Œํฌํ”Œ๋กœ

  1. Dev ์ž ๊ธˆ: pip-compile --generate-hashes -o base/requirements.txt base/requirements.in
  2. SCA ์Šค์บ”: OSV-Scanner/Trivy๋กœ CVE ํ™•์ธ โ†’ ๊ฒฐ๊ณผ ์ฒจ๋ถ€
  3. Staging ๊ฒ€์ฆ: ์žฌํ•™์Šต ์Šค๋ชจํฌ ํ…Œ์ŠคํŠธ(์ƒ˜ํ”Œ ๋ฐ์ดํ„ฐ), pip check ๋ฌด๊ฒฐ์„ฑ ํ™•์ธ
  4. SBOM ์ƒ์„ฑ: cyclonedx-py -o sbom_cyclonedx.json
  5. Prod ์Šน๊ฒฉ: ํƒœ๊ทธ(deps-vX.Y.Z) ๋‹ฌ๊ณ  CHANGELOG ๊ธฐ๋ก, ์•„ํ‹ฐํŒฉํŠธ ๋ณด๊ด€

5) ๋กค๋ฐฑ ์ •์ฑ…

  • ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ๋ฐ”๋กœ ์ด์ „ ํƒœ๊ทธ์˜ lockfile๋กœ ๋˜๋Œ๋ฆฝ๋‹ˆ๋‹ค.
  • ์‹คํ–‰:
    git checkout tags/deps-v1.3.0 -- configs/dependency/base/requirements.txt
    pip install --require-hashes -r configs/dependency/base/requirements.txt
    

6) ์ƒ์„ฑ/์—…๊ทธ๋ ˆ์ด๋“œ ์ปค๋งจ๋“œ

# ๋„๊ตฌ ์„ค์น˜
  pip install pip-tools==7.4.1
  
  # (์„ ํƒ) ์ œ์•ฝ ํŒŒ์ผ ์‚ฌ์šฉ
  # constraints.txt ๋‚ด ๊ณตํ†ต ์ œ์•ฝ ๊ด€๋ฆฌ (์˜ˆ: protobuf<5)
  
  # 1) ์ž ๊ธˆํŒŒ์ผ ์ƒ์„ฑ(ํ•ด์‹œ ํฌํ•จ)
  pip-compile \
 --generate-hashes \
 --resolver=backtracking \
 --output-file configs/dependency/base/requirements.txt \
 configs/dependency/base/requirements.in
  
  # 2) ์„ค์น˜ ์‹œ ํ•ด์‹œ ๊ฒ€์ฆ
  pip install --require-hashes -r configs/dependency/base/requirements.txt
  
  # 3) ์˜์กด์„ฑ ์ถฉ๋Œ ๊ฒ€์‚ฌ
  pip check
  
  # 4) SBOM ์ƒ์„ฑ (๊ฐ์‚ฌ/๊ฐ๋ฆฌ ๋Œ€์‘)
  cyclonedx-py -o artifacts/sbom/sbom_cyclonedx_$(date +%F).json

5. SBOM ๋ฐ NOTICE

๐Ÿ“˜ SBOM ํ•„๋“œ

ํ•ญ๋ชฉ ์˜ˆ์‹œ ๊ฐ’
Name tensorflow
Version 2.15.0
License Apache-2.0
Hash sha256:d2b8f9f7a18fef2d7f6a08db5a7...
Supplier Google LLC
Download URL https://pypi.org/project/tensorflow/2.15.0/

๐Ÿ“œ THIRD_PARTY_NOTICES.txt ์˜ˆ์‹œ

This product includes third-party software components:

  • TensorFlow 2.15.0 โ€” Apache-2.0
  • Keras 2.15.0 โ€” Apache-2.0
  • NumPy 1.26.4 โ€” BSD-3-Clause
  • Pandas 2.2.2 โ€” BSD-3-Clause
  • scikit-learn 1.5.1 โ€” BSD-3-Clause
  • Matplotlib 3.8.x โ€” PSF License All rights reserved by their respective owners.

6. ์ทจ์•ฝ์  ๋ฐ ๋ฒ•์  ๋ฆฌ์Šคํฌ ๋Œ€์‘ ์‹œ๋‚˜๋ฆฌ์˜ค

์‹œ๋‚˜๋ฆฌ์˜ค ์˜ํ–ฅ ๋Œ€์‘ ์กฐ์น˜ ์ฆ์ 
๊ณ ์œ„ํ—˜ CVE ํฌํ•จ ๋ณด์•ˆ ์นจํ•ด, ๋ฐ์ดํ„ฐ ๋…ธ์ถœ ๋ฒ„์ „ ์—…/๊ต์ฒด, ์˜ํ–ฅํ‰๊ฐ€ ๋ณด๊ณ ์„œ ์ž‘์„ฑ SCA ๊ฒฐ๊ณผ ๋ฐ ํŒจ์น˜ ๋กœ๊ทธ
GPL/AGPL ์ฝ”๋“œ ํ˜ผ์ž… ์†Œ์Šค ๊ณต๊ฐœ ์š”๊ตฌ, ์„œ๋น„์Šค ์ค‘๋‹จ ๋Œ€์ฒด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๊ต์ฒด, ๋ฒ•๋ฌด ๊ฒ€ํ†  ๋ผ์ด์„ ์Šค ๋ถ„์„์„œ
๋ฐ์ดํ„ฐ ์•ฝ๊ด€ ์œ„๋ฐ˜ ๋ฒ•์  ๋ถ„์Ÿ, ๋ฐฐํฌ ๊ธˆ์ง€ ์‚ฌ์šฉ ์ค‘๋‹จ, ์ถœ์ฒ˜ ๋ช…์‹œ, ๋Œ€์ฒด ๋ฐ์ดํ„ฐ ํ™•๋ณด ์•ฝ๊ด€ ์‚ฌ๋ณธ, ์‚ฌ์šฉ๋‚ด์—ญ ๋กœ๊ทธ
SBOM ๋ฏธ์ž‘์„ฑ ๊ฐ์‚ฌยทRCA ๋ถˆ๊ฐ€ SBOM ์ฆ‰์‹œ ์ƒ์„ฑ ๋ฐ ๊ด€๋ฆฌ ์ ˆ์ฐจ ๊ฐ•ํ™” SBOM ํŒŒ์ผ, ์Šน์ธ ๋‚ด์—ญ

7. ๊ฐœ๋ฐœ์ž ์ฒดํฌ๋ฆฌ์ŠคํŠธ (Developer Checklist)

  • [โœ“] requirements.txt ๋ฒ„์ „ ๋ฐ ํ•ด์‹œ ๊ณ ์ • ์™„๋ฃŒ
  • [โœ“] SBOM ํŒŒ์ผ ์ƒ์„ฑ ๋ฐ ์ €์žฅ
  • [โœ“] SCA/๋ผ์ด์„ ์Šค ์Šค์บ” ํ†ต๊ณผ ๋ฆฌํฌํŠธ ์ฒจ๋ถ€
  • [โœ“] LICENSE / NOTICE / THIRD_PARTY_NOTICES ํฌํ•จ
  • [โœ“] ๋ฐ์ดํ„ฐยท๋ชจ๋ธ ์ถœ์ฒ˜ ํ‘œ๊ธฐ ๋ฐ ๊ถŒ๋ฆฌ ๋ช…์‹œ
  • [โœ“] ์šด์˜ ๋กœ๊ทธ์— ๋ฒ„์ „/ํ•ด์‹œ ๊ธฐ๋ก ์™„๋ฃŒ

8. ์ฑ…์ž„ ๋ฐ ์—ญํ•  (Roles & Responsibility)

์—ญํ•  ์ฑ…์ž„
๊ฐœ๋ฐœํŒ€ ๋ผ์ด์„ ์Šค ์ค€์ˆ˜, SCA ๊ฒฐ๊ณผ ๊ด€๋ฆฌ, SBOM ์ƒ์„ฑ
๋ณด์•ˆ๊ด€๋ฆฌ์ž ์ทจ์•ฝ์  ์ ๊ฒ€ ๋ฐ ํŒจ์น˜ ๊ฒ€ํ† 
๋ฒ•๋ฌดํŒ€ ๋ผ์ด์„ ์Šค ํ•ด์„, ๋ถ„์Ÿ ๋Œ€์‘
์šด์˜ํŒ€ ๋กœ๊ทธ ๊ด€๋ฆฌ, ๋ฐฐํฌ ์‹œ์  ๊ฒ€์ฆ
Downloads last month

-

Downloads are not tracked for this model. How to track
Inference Providers NEW
This model isn't deployed by any Inference Provider. ๐Ÿ™‹ Ask for provider support