dev
timofejmalinin 2 years ago
parent ec6b466a6b
commit 0345de2d1d

@ -29,6 +29,7 @@ from service.service import PointService
@shared_task() @shared_task()
def raschet(table_name='service_placementpoint'): def raschet(table_name='service_placementpoint'):
print('start raschet')
status, _ = models.TaskStatus.objects.get_or_create(task_name=STATUS_TASK_NAME) status, _ = models.TaskStatus.objects.get_or_create(task_name=STATUS_TASK_NAME)
raschet_objs = models.RaschetObjects.objects.all() raschet_objs = models.RaschetObjects.objects.all()
if raschet_objs: if raschet_objs:
@ -118,6 +119,9 @@ def raschet(table_name='service_placementpoint'):
X_trn = pts_trn[feats].drop(columns=['id']) X_trn = pts_trn[feats].drop(columns=['id'])
Y_trn = pts_trn[['fact']] Y_trn = pts_trn[['fact']]
status.status = 'Записи для инференса'
status.save()
# Записи для инференса # Записи для инференса
if table_name == 'service_placementpoint': if table_name == 'service_placementpoint':
pts_inf = pts.loc[(pts.status == 'Pending') | pts_inf = pts.loc[(pts.status == 'Pending') |
@ -166,8 +170,11 @@ def raschet(table_name='service_placementpoint'):
r2_scores = [] r2_scores = []
mapes = [] mapes = []
y_infers = [] y_infers = []
status.status = 'Обучение inference 0%'
status.save()
for i in seeds: for i in seeds:
status.status = 'Обучение inference: ' + str(int((seeds.index(i) + 1) / len(seeds) * 100)) + '%'
status.save()
x_trn, x_test, y_trn, y_test = ms.train_test_split(X_trn, Y_trn, test_size=0.2, random_state=i) x_trn, x_test, y_trn, y_test = ms.train_test_split(X_trn, Y_trn, test_size=0.2, random_state=i)
model = catboost.CatBoostRegressor(cat_features=['property_era'], random_state=i) model = catboost.CatBoostRegressor(cat_features=['property_era'], random_state=i)
model.fit(x_trn, y_trn, verbose=False) model.fit(x_trn, y_trn, verbose=False)
@ -177,7 +184,7 @@ def raschet(table_name='service_placementpoint'):
r2_scores.append(r2_score) r2_scores.append(r2_score)
mapes.append(mape) mapes.append(mape)
y_infers.append(model.predict(X_inf.drop(columns=['id']))) y_infers.append(model.predict(X_inf.drop(columns=['id'])))
status.status = 'Обучение inference 100%'
current_pred = sum(y_infers) / 5 current_pred = sum(y_infers) / 5
# Обновление полей по результатам работы модели # Обновление полей по результатам работы модели
@ -378,14 +385,14 @@ def load_post_and_pvz(obj_id: int):
@shared_task() @shared_task()
def add_age_day(): def add_age_day():
qs = PlacementPoint.objects qs = PlacementPoint.objects.filter(status='Working')
c1 = qs.filter(sample_trn=True).count() # c1 = qs.filter(sample_trn=True).count()
qs.update(age_day=F('age_day') + 1) qs.update(age_day=F('age_day') + 1)
qs2 = qs.filter(age_day__gt=AGE_DAY_LIMIT) qs2 = qs.filter(age_day__gt=AGE_DAY_LIMIT)
qs2.update(sample_trn=True) qs2.update(sample_trn=True)
c2 = PlacementPoint.objects.filter(sample_trn=True).count() # c2 = PlacementPoint.objects.filter(sample_trn=True).count()
if c2 - c1 != 0: # if c2 - c1 != 0:
raschet.delay() # raschet.delay()
@shared_task() @shared_task()

@ -385,6 +385,7 @@ class PrePlacementPointViewSet(PlacementPointViewSet):
rayon = obj.pop('area') rayon = obj.pop('area')
obj['district']=models.AO.objects.get(id=ao) obj['district']=models.AO.objects.get(id=ao)
obj['area'] = models.Rayon.objects.get(id=rayon) obj['area'] = models.Rayon.objects.get(id=rayon)
obj['age_day'] = 1
models.PlacementPoint.objects.create(**obj) models.PlacementPoint.objects.create(**obj)
models.PrePlacementPoint.objects.all().delete() models.PrePlacementPoint.objects.all().delete()
return Response(status=HTTPStatus.OK, ) return Response(status=HTTPStatus.OK, )

Loading…
Cancel
Save