Evalml: ํ™์ฑ„ ๋ฐ์ดํ„ฐ ์„ธํŠธ์—์„œ AutoML ์‹คํ–‰ ์‹คํŒจ

์— ๋งŒ๋“  2020๋…„ 07์›” 23์ผ  ยท  3์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: alteryx/evalml

evalml 0.11.2๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์ด์ „์— ์ด ๋ฌธ์ œ์— ๋Œ€ํ•œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์ด์—ˆ๋˜ AutoMLSearch์—์„œ ๋ฐ์ดํ„ฐ ๊ฒ€์‚ฌ๋ฅผ False๋กœ ์„ค์ •ํ•˜๋Š” ์˜ต์…˜์ด ์ œ๊ฑฐ๋œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.


TypeError Traceback(๊ฐ€์žฅ ์ตœ๊ทผ ํ˜ธ์ถœ ๋งˆ์ง€๋ง‰)
์—
1 automl = AutoMLSearch(objective="log_loss_multi", max_pipelines=5, problem_type="multiclass")
2
----> 3 automl.search(X, y)

~.conda\envs\evalml_test_1.0\lib\site-packages\evalml\automl\automl_search.py โ€‹โ€‹๊ฒ€์ƒ‰(self, X, y, data_checks, feature_types, raise_errors, show_iteration_plot)
316
317 = ๅฏถๅบฆ
--> 318 data_check_results = data_checks.validate(X, y)
319
320 if len(data_check_results) > 0:

~.conda\envs\evalml_test_1.0\lib\site-packages\evalml\data_checks\data_checks.py in validate(self, X, y)
33๊ฐœ์˜ ๋ฉ”์‹œ์ง€ = []
self.data_checks์˜ data_check์šฉ 34๊ฐœ:
---> 35๊ฐœ์˜ ๋ฉ”์‹œ์ง€_์‹ ๊ทœ = data_check.validate(X, y)
36 ๋ฉ”์‹œ์ง€.ํ™•์žฅ(messages_new)
37 ๋ฐ˜ํ™˜ ๋ฉ”์‹œ์ง€

~.conda\envs\evalml_test_1.0\lib\site-packages\evalml\data_checks\label_leakage_data_check.py in validate(self, X, y)
53 if len(X.columns) == 0:
54 ๋ฐ˜ํ™˜ []
---> 55 corrs = {label: abs(y.corr(col)) for label, col in X.iteritems() if abs(y.corr(col)) >= self.pct_corr_threshold}
56
57 high_corr_cols = {ํ‚ค: ํ‚ค์— ๋Œ€ํ•œ ๊ฐ’, ๊ฐ’ >= self.pct_corr_threshold์ธ ๊ฒฝ์šฐ corrs.items()์˜ ๊ฐ’}

~.conda\envs\evalml_test_1.0\lib\site-packages\evalml\data_checks\label_leakage_data_check.py(.0)
53 if len(X.columns) == 0:
54 ๋ฐ˜ํ™˜ []
---> 55 corrs = {label: abs(y.corr(col)) for label, col in X.iteritems() if abs(y.corr(col)) >= self.pct_corr_threshold}
56
57 high_corr_cols = {ํ‚ค: ํ‚ค์— ๋Œ€ํ•œ ๊ฐ’, ๊ฐ’ >= self.pct_corr_threshold์ธ ๊ฒฝ์šฐ corrs.items()์˜ ๊ฐ’}

~.conda\envs\evalml_test_1.0\lib\site-packages\pandas\core\series.py in corr(self, other, method, min_periods)
2252 if method in ["pearson", "spearman", "kendall"] ๋˜๋Š” callable(method):
2253
-> 2254 this.values, other.values, method=method, min_periods=min_periods
2255)
2256

~.conda\envs\evalml_test_1.0\lib\site-packages\pandas\core\nanops.py in _f( args, * kwargs)
67 ์‹œ๋„:
68 np.errstate(invalid="ignore"):
---> 69 ๋ฐ˜ํ™˜ f( ์ธ์ˆ˜, * kwargs)
70 e๋กœ ValueError ์ œ์™ธ:
71 # ๊ฐ์ฒด ๋ฐฐ์—ด์„ ๋ณ€ํ™˜ํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค

~.conda\envs\evalml_test_1.0\lib\site-packages\pandas\core\nanops.py in nancorr(a, b, method, min_periods)
1238
1239 ์—ํ”„ = get_corr_func(๋ฉ”์†Œ๋“œ)
-> 1240 ๋ฐ˜ํ™˜ f(a, b)
1241
1242

~.conda\envs\evalml_test_1.0\lib\site-packages\pandas\core\nanops.py in _pearson(a, b)
1254
1255 def _pearson(a, b):
-> 1256 ๋ฐ˜ํ™˜ np.corrcoef(a, b)[0, 1]
1257
1258 def _kendall(a, b):

corrcoef( args, * kwargs)์˜ <__array_function__ ๋‚ด๋ถ€>

~.conda\envs\evalml_test_1.0\lib\site-packages\numpy\lib\function_base.py in corrcoef(x, y, rowvar, bias, ddof)
2524 warnings.warn('bias ๋ฐ ddof๋Š” ํšจ๊ณผ๊ฐ€ ์—†์œผ๋ฉฐ ๋” ์ด์ƒ ์‚ฌ์šฉ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค',
2525 ์‚ฌ์šฉ ์ค‘๋‹จ ๊ฒฝ๊ณ , ์Šคํƒ ์ˆ˜์ค€=3)
-> 2526 c = cov(x, y, rowvar)
2527 ์‹œ๋„:
2528 d = diag(c)

cov( args, * kwargs)์˜ <__array_function__ ๋‚ด๋ถ€>

~.conda\envs\evalml_test_1.0\lib\site-packages\numpy\lib\function_base.py in cov(m, y, rowvar, bias, ddof, fweights, aweights)
2429 w *= ๋ฌด๊ฒŒ
2430
-> 2431 ํ‰๊ท , w_sum = ํ‰๊ท (X, ์ถ•=1, ๊ฐ€์ค‘์น˜=w, ๋ฐ˜ํ™˜๋จ=์ฐธ)
2432 (์ฃผ)์—์ด์น˜
2433

<__array_function__ ๋‚ด๋ถ€> ํ‰๊ท ( args, * kwargs)

~.conda\envs\evalml_test_1.0\lib\site-packages\numpy\lib\function_base.py in average(a, axis, weights, ๋ฐ˜ํ™˜๋จ)
391
๊ฐ€์ค‘์น˜๊ฐ€ ์—†์Œ์ธ ๊ฒฝ์šฐ 392:
--> 393 ํ‰๊ท  = ํ‰๊ท (์ถ•)
394 scl = avg.dtype.type
395 ๊ธฐํƒ€:

~.conda\envs\evalml_test_1.0\lib\site-packages\numpy\core_methods.py in _mean(a, axis, dtype, out, keepdims)
152 if isinstance(ret, mu.ndarray):
153ํ™”
--> 154 ret, rcount, out=ret, ์บ์ŠคํŒ…='์•ˆ์ „ํ•˜์ง€ ์•Š์Œ', subok=False)
155 is_float16_result์ด๊ณ  out์ด None์ด๋ฉด:
156ํ™”

TypeError: ์ง€์›๋˜์ง€ ์•Š๋Š” ํ”ผ์—ฐ์‚ฐ์ž ์œ ํ˜•/: 'str' ๋ฐ 'int'

์‹คํ–‰ํ•  ๋•Œ ์•ฝ๊ฐ„ ๋‹ค๋ฅธ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์Šคํƒ ์ถ”์ ์œผ๋กœ ์‹คํŒจํ•˜๋Š” ๋Œ€์‹  ๊ฒ€์ƒ‰์ด ์‹คํ–‰๋˜์ง€๋งŒ ๋ชจ๋“  ํŒŒ์ดํ”„๋ผ์ธ์— ๋Œ€ํ•œ ๋ชจ๋“  ์ ์ˆ˜๋Š” nan์ž…๋‹ˆ๋‹ค.

๋กœ๊ทธ ์†์‹ค ๋‹ค์ค‘ ํด๋ž˜์Šค์— ๋Œ€ํ•œ ์ตœ์ ํ™”.
์ ์ˆ˜๊ฐ€ ๋‚ฎ์„์ˆ˜๋ก ์ข‹์Šต๋‹ˆ๋‹ค.

์ตœ๋Œ€ 4๊ฐœ์˜ ํŒŒ์ดํ”„๋ผ์ธ์„ ๊ฒ€์ƒ‰ํ•ฉ๋‹ˆ๋‹ค.
ํ—ˆ์šฉ๋˜๋Š” ๋ชจ๋ธ ํŒจ๋ฐ€๋ฆฌ: random_forest, xgboost, linear_model, catboost

(1/4) ๋ชจ๋“œ ๊ธฐ์ค€์„  ๋‹ค์ค‘ ํด๋ž˜์Šค ๋ถ„๋ฅ˜... ๊ฒฝ๊ณผ:00 :00
๊ต์ฐจ ๊ฒ€์ฆ ์‹œ์ž‘
๋ชฉํ‘œ Log Loss Multiclass๋ฅผ ์ฑ„์ ํ•˜๋Š” ๋™์•ˆ PipelineBase.score์˜ ์˜ค๋ฅ˜: ufunc 'isnan'์€ ์ž…๋ ฅ ์œ ํ˜•์— ๋Œ€ํ•ด ์ง€์›๋˜์ง€ ์•Š์œผ๋ฉฐ ์ž…๋ ฅ์€ ์บ์ŠคํŒ… ๊ทœ์น™ ''safe''์— ๋”ฐ๋ผ ์ง€์›๋˜๋Š” ์œ ํ˜•์œผ๋กœ ์•ˆ์ „ํ•˜๊ฒŒ ๊ฐ•์ œ ๋ณ€ํ™˜๋  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
๋ชฉํ‘œ Log Loss Multiclass๋ฅผ ์ฑ„์ ํ•˜๋Š” ๋™์•ˆ PipelineBase.score์˜ ์˜ค๋ฅ˜: ufunc 'isnan'์€ ์ž…๋ ฅ ์œ ํ˜•์— ๋Œ€ํ•ด ์ง€์›๋˜์ง€ ์•Š์œผ๋ฉฐ ์ž…๋ ฅ์€ ์บ์ŠคํŒ… ๊ทœ์น™ ''safe''์— ๋”ฐ๋ผ ์ง€์›๋˜๋Š” ์œ ํ˜•์œผ๋กœ ์•ˆ์ „ํ•˜๊ฒŒ ๊ฐ•์ œ ๋ณ€ํ™˜๋  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
๋ชฉํ‘œ Log Loss Multiclass๋ฅผ ์ฑ„์ ํ•˜๋Š” ๋™์•ˆ PipelineBase.score์˜ ์˜ค๋ฅ˜: ufunc 'isnan'์€ ์ž…๋ ฅ ์œ ํ˜•์— ๋Œ€ํ•ด ์ง€์›๋˜์ง€ ์•Š์œผ๋ฉฐ ์ž…๋ ฅ์€ ์บ์ŠคํŒ… ๊ทœ์น™ ''safe''์— ๋”ฐ๋ผ ์ง€์›๋˜๋Š” ์œ ํ˜•์œผ๋กœ ์•ˆ์ „ํ•˜๊ฒŒ ๊ฐ•์ œ ๋ณ€ํ™˜๋  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
๊ต์ฐจ ๊ฒ€์ฆ ์™„๋ฃŒ - ํ‰๊ท  ๋กœ๊ทธ ์†์‹ค ๋ฉ€ํ‹ฐํด๋ž˜์Šค: nan
(2/4) CatBoost ๋ถ„๋ฅ˜๊ธฐ w/ Simple Imputer Elapsed:00 :00
๊ต์ฐจ ๊ฒ€์ฆ ์‹œ์ž‘
๋ชฉํ‘œ Log Loss Multiclass๋ฅผ ์ฑ„์ ํ•˜๋Š” ๋™์•ˆ PipelineBase.score์˜ ์˜ค๋ฅ˜: ufunc 'isnan'์€ ์ž…๋ ฅ ์œ ํ˜•์— ๋Œ€ํ•ด ์ง€์›๋˜์ง€ ์•Š์œผ๋ฉฐ ์ž…๋ ฅ์€ ์บ์ŠคํŒ… ๊ทœ์น™ ''safe''์— ๋”ฐ๋ผ ์ง€์›๋˜๋Š” ์œ ํ˜•์œผ๋กœ ์•ˆ์ „ํ•˜๊ฒŒ ๊ฐ•์ œ ๋ณ€ํ™˜๋  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
๋ชฉํ‘œ Log Loss Multiclass๋ฅผ ์ฑ„์ ํ•˜๋Š” ๋™์•ˆ PipelineBase.score์˜ ์˜ค๋ฅ˜: ufunc 'isnan'์€ ์ž…๋ ฅ ์œ ํ˜•์— ๋Œ€ํ•ด ์ง€์›๋˜์ง€ ์•Š์œผ๋ฉฐ ์ž…๋ ฅ์€ ์บ์ŠคํŒ… ๊ทœ์น™ ''safe''์— ๋”ฐ๋ผ ์ง€์›๋˜๋Š” ์œ ํ˜•์œผ๋กœ ์•ˆ์ „ํ•˜๊ฒŒ ๊ฐ•์ œ ๋ณ€ํ™˜๋  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
๋ชฉํ‘œ Log Loss Multiclass๋ฅผ ์ฑ„์ ํ•˜๋Š” ๋™์•ˆ PipelineBase.score์˜ ์˜ค๋ฅ˜: ufunc 'isnan'์€ ์ž…๋ ฅ ์œ ํ˜•์— ๋Œ€ํ•ด ์ง€์›๋˜์ง€ ์•Š์œผ๋ฉฐ ์ž…๋ ฅ์€ ์บ์ŠคํŒ… ๊ทœ์น™ ''safe''์— ๋”ฐ๋ผ ์ง€์›๋˜๋Š” ์œ ํ˜•์œผ๋กœ ์•ˆ์ „ํ•˜๊ฒŒ ๊ฐ•์ œ ๋ณ€ํ™˜๋  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
๊ต์ฐจ ๊ฒ€์ฆ ์™„๋ฃŒ - ํ‰๊ท  ๋กœ๊ทธ ์†์‹ค ๋ฉ€ํ‹ฐํด๋ž˜์Šค: nan
(3/4) XGBoost ๋ถ„๋ฅ˜๊ธฐ w/ Simple Imputer Elapsed:00 :02
๊ต์ฐจ ๊ฒ€์ฆ ์‹œ์ž‘
๋ชฉํ‘œ Log Loss Multiclass๋ฅผ ์ฑ„์ ํ•˜๋Š” ๋™์•ˆ PipelineBase.score์˜ ์˜ค๋ฅ˜: ufunc 'isnan'์€ ์ž…๋ ฅ ์œ ํ˜•์— ๋Œ€ํ•ด ์ง€์›๋˜์ง€ ์•Š์œผ๋ฉฐ ์ž…๋ ฅ์€ ์บ์ŠคํŒ… ๊ทœ์น™ ''safe''์— ๋”ฐ๋ผ ์ง€์›๋˜๋Š” ์œ ํ˜•์œผ๋กœ ์•ˆ์ „ํ•˜๊ฒŒ ๊ฐ•์ œ ๋ณ€ํ™˜๋  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
๋ชฉํ‘œ Log Loss Multiclass๋ฅผ ์ฑ„์ ํ•˜๋Š” ๋™์•ˆ PipelineBase.score์˜ ์˜ค๋ฅ˜: ufunc 'isnan'์€ ์ž…๋ ฅ ์œ ํ˜•์— ๋Œ€ํ•ด ์ง€์›๋˜์ง€ ์•Š์œผ๋ฉฐ ์ž…๋ ฅ์€ ์บ์ŠคํŒ… ๊ทœ์น™ ''safe''์— ๋”ฐ๋ผ ์ง€์›๋˜๋Š” ์œ ํ˜•์œผ๋กœ ์•ˆ์ „ํ•˜๊ฒŒ ๊ฐ•์ œ ๋ณ€ํ™˜๋  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
๋ชฉํ‘œ Log Loss Multiclass๋ฅผ ์ฑ„์ ํ•˜๋Š” ๋™์•ˆ PipelineBase.score์˜ ์˜ค๋ฅ˜: ufunc 'isnan'์€ ์ž…๋ ฅ ์œ ํ˜•์— ๋Œ€ํ•ด ์ง€์›๋˜์ง€ ์•Š์œผ๋ฉฐ ์ž…๋ ฅ์€ ์บ์ŠคํŒ… ๊ทœ์น™ ''safe''์— ๋”ฐ๋ผ ์ง€์›๋˜๋Š” ์œ ํ˜•์œผ๋กœ ์•ˆ์ „ํ•˜๊ฒŒ ๊ฐ•์ œ ๋ณ€ํ™˜๋  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
๊ต์ฐจ ๊ฒ€์ฆ ์™„๋ฃŒ - ํ‰๊ท  ๋กœ๊ทธ ์†์‹ค ๋ฉ€ํ‹ฐํด๋ž˜์Šค: nan
(4/4) Random Forest Classifier w/ Simple Im... Elapsed:00 :02
๊ต์ฐจ ๊ฒ€์ฆ ์‹œ์ž‘
๋ชฉํ‘œ Log Loss Multiclass๋ฅผ ์ฑ„์ ํ•˜๋Š” ๋™์•ˆ PipelineBase.score์˜ ์˜ค๋ฅ˜: ufunc 'isnan'์€ ์ž…๋ ฅ ์œ ํ˜•์— ๋Œ€ํ•ด ์ง€์›๋˜์ง€ ์•Š์œผ๋ฉฐ ์ž…๋ ฅ์€ ์บ์ŠคํŒ… ๊ทœ์น™ ''safe''์— ๋”ฐ๋ผ ์ง€์›๋˜๋Š” ์œ ํ˜•์œผ๋กœ ์•ˆ์ „ํ•˜๊ฒŒ ๊ฐ•์ œ ๋ณ€ํ™˜๋  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
๋ชฉํ‘œ Log Loss Multiclass๋ฅผ ์ฑ„์ ํ•˜๋Š” ๋™์•ˆ PipelineBase.score์˜ ์˜ค๋ฅ˜: ufunc 'isnan'์€ ์ž…๋ ฅ ์œ ํ˜•์— ๋Œ€ํ•ด ์ง€์›๋˜์ง€ ์•Š์œผ๋ฉฐ ์ž…๋ ฅ์€ ์บ์ŠคํŒ… ๊ทœ์น™ ''safe''์— ๋”ฐ๋ผ ์ง€์›๋˜๋Š” ์œ ํ˜•์œผ๋กœ ์•ˆ์ „ํ•˜๊ฒŒ ๊ฐ•์ œ ๋ณ€ํ™˜๋  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
๋ชฉํ‘œ Log Loss Multiclass๋ฅผ ์ฑ„์ ํ•˜๋Š” ๋™์•ˆ PipelineBase.score์˜ ์˜ค๋ฅ˜: ufunc 'isnan'์€ ์ž…๋ ฅ ์œ ํ˜•์— ๋Œ€ํ•ด ์ง€์›๋˜์ง€ ์•Š์œผ๋ฉฐ ์ž…๋ ฅ์€ ์บ์ŠคํŒ… ๊ทœ์น™ ''safe''์— ๋”ฐ๋ผ ์ง€์›๋˜๋Š” ์œ ํ˜•์œผ๋กœ ์•ˆ์ „ํ•˜๊ฒŒ ๊ฐ•์ œ ๋ณ€ํ™˜๋  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
๊ต์ฐจ ๊ฒ€์ฆ ์™„๋ฃŒ - ํ‰๊ท  ๋กœ๊ทธ ์†์‹ค ๋ฉ€ํ‹ฐํด๋ž˜์Šค: nan

00:02 ์ดํ›„ ๊ฒ€์ƒ‰ ์™„๋ฃŒ
์ตœ๊ณ ์˜ ํŒŒ์ดํ”„๋ผ์ธ: ๋ชจ๋“œ ๊ธฐ์ค€์„  ๋‹ค์ค‘ ํด๋ž˜์Šค ๋ถ„๋ฅ˜ ํŒŒ์ดํ”„๋ผ์ธ
์ตœ๊ณ ์˜ ํŒŒ์ดํ”„๋ผ์ธ ๋กœ๊ทธ ์†์‹ค ๋‹ค์ค‘ ํด๋ž˜์Šค: nan
ToolId 3: AutoML ๋„๊ตฌ ์™„๋ฃŒ
14.397์ดˆ ๋งŒ์— ์™„๋ฃŒ

pandas ๋ฐ์ดํ„ฐ ์œ ํ˜•์€ ๋‘ ํ™˜๊ฒฝ ๋ชจ๋‘์—์„œ ๋™์ผํ•ฉ๋‹ˆ๋‹ค.

sepal.length float64
sepal.width float64
๊ฝƒ์žŽ.๊ธธ์ด float64
๊ฝƒ์žŽ ํญ float64
ํด๋ž˜์Šค ๊ฐ์ฒด
dtype: ๊ฐ์ฒด

Jupyter ๋…ธํŠธ๋ถ์€ Python 3.7.3์„ ์‚ฌ์šฉํ•˜๊ณ  ๋„๊ตฌ๋Š” 3.6.8์ž…๋‹ˆ๋‹ค.

๋ชจ๋“  3 ๋Œ“๊ธ€

@SydneyAyx : ์˜ˆ, 0.11.2์—์„œ ๋ฐ์ดํ„ฐ ๊ฒ€์‚ฌ๋ฅผ ๋น„ํ™œ์„ฑํ™”ํ•˜๋Š” ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ๋ณ€๊ฒฝ

automl.search(..., data_checks=None, ...)

์‚ฌ์šฉ์ž ๊ฐ€์ด๋“œ ์„น์…˜์— ์ถ”๊ฐ€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์‹œ๋„ํ•ด ๋ณด์‹œ๊ณ  ๊ทธ๋ž˜๋„ ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜์ง€ ์•Š์œผ๋ฉด ๋‹ค์‹œ ์ด์•ผ๊ธฐํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋œ๋‹ค๋ฉด #828์ด ์ด์ „์— ์ด๋ฅผ ์ถ”์ ํ•˜๊ธฐ ์œ„ํ•ด ์ œ์ถœ๋œ ๊ฒƒ์œผ๋กœ ๊ธฐ์–ตํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์šฐ๋ฆฌ๋Š” ํ˜„์žฌ ์ง„ํ–‰ ์ค‘์ธ #645๋ฅผ ์œ„ํ•ด ๊ทธ๊ฒƒ์„ ๋‹ซ์•˜์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ #645๊ฐ€ ์‹ค์ œ๋กœ ๊ทผ๋ณธ์ ์ธ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์„์ง€ ํ™•์‹ ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‹ˆ ์—ด์–ด๋‘์ž.

์•„, ํƒ€์ž„๋ผ์ธ์— ๋Œ€ํ•ด ํ˜ผ๋ž€์Šค๋Ÿฌ์›Œํ–ˆ์Šต๋‹ˆ๋‹ค. #932๊ฐ€ ์ง€๋‚œ ์ฃผ์— ๋ณ‘ํ•ฉ๋˜์–ด ์ด ๋ฌธ์ œ๋ฅผ ์ˆ˜์ •ํ–ˆ์Šต๋‹ˆ๋‹ค! ๋‚˜๋Š” ์ด๊ฒƒ์„ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด #828์—์„œ ์ž‘์„ฑํ•œ ์žฌ์ƒ๊ธฐ๋ฅผ ๋ฐฉ๊ธˆ ์‹คํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ ๋ฆด๋ฆฌ์Šค( 0.12.0 , ๋‹ค์Œ ํ™”์š”์ผ)์—๋Š” ์ˆ˜์ • ์‚ฌํ•ญ์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.

๋‚˜๋Š” ์ด๊ฒƒ์„ ์—ด์–ด๋‘๊ณ  ์šฐ๋ฆฌ๊ฐ€ ๊ทธ ๋ฆด๋ฆฌ์Šค๋ฅผ ๋ฐœํ‘œํ•  ๋•Œ ๊ทธ๊ฒƒ์„ ๋‹ซ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋ฐฉ๊ธˆ ๋‚˜๊ฐ„ v0.12.0 ์—์„œ ์ˆ˜์ •๋˜์—ˆ์Šต๋‹ˆ๋‹ค!

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰