Обсуждение статьи "Случайные леса предсказывают тренды" - страница 11

 
CyberCortex:


Я занимаюсь совершенно конкретными вещами, поэтому не склонен обсуждать что-либо "в общем". 

Итак конкретнее.

В оболочке caret используется около 140 пакетов машинного обучения - я использую в своей работе два пакета для лесов случайных деревьев и один пакет для машин опорных векторов (SVM). Как видите делать какие-либо обобщения для инструментов машинного обучения, доступных в R, я не в состоянии. 

Более того.

Это ветка, в которой используется очень ограниченная оболочка Rattle, из которой в данной статье я использовал только пакет randomforest. 

Более того.

Из указанного пакета мною в статье используется только часть функций.

Далее я прокомментирую Ваш пост, используя только эти ограничения, но под свои слова я могу подложить программный код и результаты его использования. 

Итак. 

1. " все финансовые ряды относятся к так называемым временным рядам, в которых важен порядок следования величин. " - никто этого не отрицает и этот порядок не нарушается, хоть это и временной ряд. Вы же, обучив модель на ценах P1, P2, P3...Pn, не меняете порядок их следования при тестировании на Out Of Samples или при реальном использовании.

 Это совершенно не соответствует указанным пакетам. В рамках других пакетов можно реализовать Ваше замечание, но это будет гораздо более сложный код. Тот код, который используется в статье (а именно этот подход является самым распространенным в алгоритмах машинного обучения)выглядит следующим образом:

Исходная выборка (набор данных) разбивается на три части: train (70%), test(15%), validate(15). Алгоритм разбивки следующий: например, для train случайным образом, а не последовательно, выбирается 70% строк исходного набора данных. Из оставшихся 30% опять случайным образом выбирается еще 15%.     Понятно, что оставшиеся 15% - это тоже случайная последовательность строк. Не может быть и речи о какой-либо соблюдении последовательности баров.

Но это еще не все.

Обучение, которое ведется на наборе train, использует только часть данных (примерно 66%). Оставшаяся часть данных - это и есть оценка Out of sample (ООВ). Т.е. бары, на которых было вычислено ООВ, они  были другими, но они были перемешаны с барами, на которых производилось обучение. В статье эта оценка приводится и она всегда дает самую хорошую результативность.

Затем в rattle можно получить оценку обученной модели еще на двух наборах данных. Сравнивая ТРИ оценки можно делать выводы.

Еще раз, чтобы учить модели на временных рядах нужно прилагать специальные усилия. Если Вы хотите использовать rattle, то целевая переменная и соответствующие предикторы должны допускать случайный порядок следования баров в обучении и тестировании.  

 2. Я согласен с Вами в одном: если на входе 100% мусорных предикторов, то мы и получаем 100% мусора на выходе. Это очевидно и с этим никто не спорит. Я говорю лишь о том, что существуют алгоритмы, где неважно отбирать данные, потому что они дают хорошие результаты на Out Of Samples с любым количеством мусорных данных, отличных от 100%, ибо мусорные данные не используются де-факто. Здесь также важно отличать алгоритмы, для которых критично сокращение размерности данных, например с помощью анализа главных компонент или автоэнкодеров, от алгоритмов, которые к размерности данных не чувствительны.

 Это не так. В randomforest имеется встроенный алгоритм определения знАчимости предикторов. Этот алгоритм совершенно бесполезен, если среди предикторов имеется мусор. В самом пакете randomforest имеется дополнительная функция для предварительного отсеивания мусорных предикторов, но она недоступна в rattle. 

 "На фондовом рынке распространены исследования о связи экономических причин с направлением движения, но все это не относится к  внутридневным интервалам." - Ну еще как относится, причем к внутридневным интервалам, например выход Non-Farm Payrolls. 

Не знаю, не в курсе про указанный ресурс. НО я хорошо знаю экономику. И могу уверенно утверждать, что часовики по Газпрому не зависят от каких бы то ни было экономических данных по другим предприятиям. По результатам месяца - без вопросов. 

3. Я конечно Вас понимаю, каждый зарабатывает как он умеет, но Вы хоть раз сами реализовывали какие-либо алгоритмы машинного обучения? Я убежден, что для того, чтобы понять как работает алгоритм, его нужно написать самому с нуля. Поверьте, что в этом случае открываются такие вещи, о которых и не пишут в книжках. И даже, казалось бы, очевидные элементы, которые до этого казались легкими, на самом деле работают не так как ты думал:) 

Одно дело делать мерсы, а другое на них ездить. Я предпочитаю ездить, но каждый делает свой выбор сам.  

 

ПС.

Я написал книгу, в которой имеются более глубокие ответы на поставленные Вами вопросы.

ПСПС

Мой личный опыт показывает, что основное время до 70% уходит на подбор предикторов - тупая и нудная работа.  На почве продажи книги образовался некоторый коллектив - никому не удается сделать быстрый и эффективный подбор предикторов, который бы не порождал переобученные модели. Причем большинство читателей уже вышли за рамки книги и используют более эффективные инструменты для работы. 

С признательностью за Ваш содержательный интерес к ветке. 

 
faa1947:


Спасибо за развернутый ответ.

Но в некоторых местах прошу Вас уточнить.  

Сперва Вы написали выше, что пример работы моей программы на данных из области медицины "показательный" и сослались на то, что временные ряды имеют строгую последовательность.

" все финансовые ряды относятся к так называемым временным рядам, в которых важен порядок следования величин. " 

А потом пишете, что в Random Forest, который вы используете: " Не может быть и речи о какой-либо соблюдении последовательности баров."

И позвольте спросить: каким образом тогда происходит работа Random Forest на временных рядах, если алгоритм изначально использует метод случайных подпространств и перемешивает эти временные ряды?

 "Еще раз, чтобы учить модели на временных рядах нужно прилагать специальные усилия." - тогда мы опять возвращаемся к началу. Зачем же тратить время на подобные алгоритмы, если для того, чтобы заставить их работать на временных рядах требуются специальные усилия? Мы ведь сейчас рассуждаем не с академической точки зрения в рамках исследовательской работы в ВУЗе, где такая работа поощряется, а с точки зрения практики.

"могу уверенно утверждать, что часовики по Газпрому не зависят от каких бы то ни было экономических данных по другим предприятиям." - значит ли это, что на акции Газпрома на внутридневных интервалах никак не влияет индекс РТС, в который входит и Газпром и другие предприятия?

 "Одно дело делать мерсы, а другое на них ездить. Я предпочитаю ездить, но каждый делает свой выбор сам. " - в софистике это называется отступление от первоначального тезиса:) Я же говорил об алгоритмах и их реализации, а Вы незаметно выдвинули тезис об автомобилях, внешне как бы и связанный с исходным тезисом, но не тождественный ему. Мне кажется между алгоритмами и автомобилями есть "небольшая" пропасть. Не обращайте внимания, просто мне нравится подмечать подобные особенности:)

Подведем промежуточный итог: то, что Вы пишете конкретно про Rattle и Random Forest, вероятнее всего, имеет отношение к действительности и Вы разбираетесь в этом.

Но один вопрос остается все еще открытым: почему человек, имея выбор из двух равноценных по качеству классификации алгоритмов (первый из которых прекрасно работает на временных рядах без специальных усилий и навыков, а второй - с таковыми), должен сделать выбор в пользу последнего? И будет ли это в данном случае оптимальным?

 
joo:
не смог пройти мимо такой фразы.. Респект!
Спасибо:)
 
CyberCortex:


Но один вопрос остается все еще открытым: почему человек, имея выбор из двух равноценных по качеству классификации алгоритмов (первый из которых прекрасно работает на временных рядах без специальных усилий и навыков, а второй - с таковыми), должен сделать выбор в пользу последнего? И будет ли это в данном случае оптимальным?

 

Разные инструменты решают разные задачи, которые, в свою очередь определяются доступным материалом.

Rattle - замечательный инструмент чтобы проверить какую-либо идею по-быстрому. Но построить с его помощью рабочую модель будет довольно затруднительно.

Можно углубиться в rattle и из него вытащить журнал с готовыми обращениями в рамках пакета randomforest. Если Ваша целевая переменная, например, предсказываете приращение актива, а не тренды, и к этому Вы сумели подобрать предикторы, то случайная выборка будет очень даже полезной. Если Вы собрались предсказывать тренды, то придется вручную делить выборку на куски, сохраняя последовательность, что в rattle затруднительно (хотя возможно) и работать прямо в пакете randomforest, который не налагает никаких ограничений на алгоритм формирования входной выборки.  Существует довольно обширный набор инструментов по формированию выборок для тестирования. Это отдельные пакеты.

Ну, и в таком духе дальше. Общий вывод: нет самого "оптимального" инструмента.

Каждый из пакетов имеет множество тонкостей, которые решают определенные проблемы в исходных данных. В общем процесс даже очень не простой.

 

ПС. Когда я писал о Газпроме, то имел ввиду о связях котировок с величинами типа прибыли. А индекс - это арифметика, тот же индюк... Но это другая проблема... Хотя использование машинного обучения на фондовом рынке более перспективен, чем на форексе. Как мне кажется.

 
faa1947:

 

Разные инструменты решают разные задачи, которые, в свою очередь определяются доступным материалом.

Rattle - замечательный инструмент чтобы проверить какую-либо идею по-быстрому. Но построить с его помощью рабочую модель будет довольно затруднительно.

Можно углубиться в rattle и из него вытащить журнал с готовыми обращениями в рамках пакета randomforest. Если Ваша целевая переменная, например, предсказываете приращение актива, а не тренды, и к этому Вы сумели подобрать предикторы, то случайная выборка будет очень даже полезной. Если Вы собрались предсказывать тренды, то придется вручную делить выборку на куски, сохраняя последовательность, что в rattle затруднительно (хотя возможно) и работать прямо в пакете randomforest, который не налагает никаких ограничений на алгоритм формирования входной выборки.  Существует довольно обширный набор инструментов по формированию выборок для тестирования. Это отдельные пакеты.

Ну, и в таком духе дальше. Общий вывод: нет самого "оптимального" инструмента.

Каждый из пакетов имеет множество тонкостей, которые решают определенные проблемы в исходных данных. В общем процесс даже очень не простой.

 

ПС. Когда я писал о Газпроме, то имел ввиду о связях котировок с величинами типа прибыли. А индекс - это арифметика, тот же индюк... Но это другая проблема... Хотя использование машинного обучения на фондовом рынке более перспективен, чем на форексе. Как мне кажется.

Спасибо, вопросов больше не имею.
 
Интересная статья, спасибо. Про R в первый раз услышал, выглядит как очень полезная вещь. Давно хочу сделать нейронную сеть которая сможет сама торговать на основе исторических данных, попробую выгрузить историю из mt5 (ohlc, spread, volumes), передать её в rattle, и посмотреть что получится.
 
Dr.Trader:
Интересная статья, спасибо. Про R в первый раз услышал, выглядит как очень полезная вещь. Давно хочу сделать нейронную сеть которая сможет сама торговать на основе исторических данных, попробую выгрузить историю из mt5 (ohlc, spread, volumes), передать её в rattle, и посмотреть что получится.

В Rattle шесть моделей, одна из них НС. Рекомендую сравнить результаты НС со случайными лесами, ada и SVM. Думаю, что результат Вас очень удивит.

 
Dr.Trader:
Интересная статья, спасибо. Про R в первый раз услышал, выглядит как очень полезная вещь. Давно хочу сделать нейронную сеть которая сможет сама торговать на основе исторических данных, попробую выгрузить историю из mt5 (ohlc, spread, volumes), передать её в rattle, и посмотреть что получится.

Вот как раз для этого rattle и не предназначен. Работать нужно прямо в R. Вот здесь вариант такого решения https://www.mql5.com/ru/articles/1103.

Успехов

Третье поколение нейросетей: "Глубокие нейросети"
Третье поколение нейросетей: "Глубокие нейросети"
  • 2014.11.27
  • Vladimir Perervenko
  • www.mql5.com
Статья посвящена новому и очень перспективному направлению в машинном обучении — так называемому "глубокому обучению" и конкретней "глубоким нейросетям". Сделан краткий обзор нейросетей 2 поколения, их архитектуры связей и основных видов, методов и правил обучения и их основных недостатков. Далее рассмотрена история появления и развития нейросетей 3 поколения, их основные виды, особенности и методы обучения. Проведены практические эксперименты по построению и обучению на реальных данных глубокой нейросети, инициируемой весами накапливающего автоэнкодера. Рассмотрены все этапы от выбора исходных данных до получения метрик. В последней части статьи приведена программная реализация глубокой нейросети в виде индикатора-эксперта на MQL4/R.
 

To: CyberCortex

Извини СанСаныч что встряю.

Не мог пройти мимо такого верхоглядства и агрессивного непрофессианализма.

Рассмотрим по порядку утверждения автора из его описания прикладной программы

Цитата: «Преимущества CyberCortex в сравнении с существующими аналогами:

  • Используемый алгоритм. Для многих трейдеров технологии из области искусственного интеллекта начинаются и заканчиваются на избитой теме классических нейронных сетей. Но алгоритм бустинга, реализованный в CyberCortex – это на порядок более мощный и современный инструмент(?), потому что: “

Возражение:

  1. Откуда это пренебрежительно величественное мнение о многих трейдерах?Вообще эта область называется «Машинное обучение», искусственный интеллект это несколько другое. Уверен, что многие трейдеры знакомы с большим количеством типов нейронных сетей о которых Вы даже не слышали ( глубокие сети, сверточные и другие современные ). Тема нейросетей избита для тех кто ограничился изучением MLP. Спешу Вас огорчить, тема нейросетей сейчас получила второе дыхание после разработки методов глубокого обучения и для знающих и умеющих это далеко не закрытая тема. Кроме этого нам известны много других алгоритмов классификации, которые реализованы в многочисленных пакетах языка R.

  2. Алгоритм бустинга в самых разнообразных модификациях известен довольно давно (1996) и никак не является более мощным чем нейросетевой. Кстати нужно было бы озвучить по какому конкретно алгоритму работает Ваша программа. На вскидку по пакетам R -

  • ADA”- адаптивный стохастический бустинг. одна из моих любимых, реализовано три модификации оригинального алгоритма : Gentle-, Logit-, and Real AdaBoost

  • «adabag” - в пакете применены мультиклассалгоритмы Adaboost.M1(Freund and Schapire's), AdaBoost-SAMME(Zhu et al., 2009) и Breiman's Bagging algorithm;

  • «boost” - содержит набор методов бустинга таких как - 'BagBoost', 'LogitBoost', 'AdaBoost' and 'L2Boost' дополненных предвыбором признаков(предикторов) с помощью Wilcoxon test statistic;

  • «pga” - содержит ансамбль алгоритмов объдиняющий AdaBoost и Random Forest эволюционным алгоритмом( в простонародии генным)

    Если у Вас оригинальный всемирно неизвестный алгоритм — донесите хотя бы в общих чертах отличие от существующих и какие то преимущества над ними да и ссылку на описание желательно бы.

Как видите выбор довольно широк.

Для тех кто не в теме. «Бустинг»(усиление) — метод ресемплинга предложенный первоначально для решения задач в областях науки, где изначально количество примеров(результатов экспериментов) для использовании их в стат расчетах было мало, добыть новые невозможно или очень дорого. Суть метода заключается в извлечении из первоначального небольшого набора выборку меньшего размера сформированную случайным образом. Эту процедуру повторяют многократно и в результате получают достаточно большую суммарную выборку которую и используют в последующем в стат расчетах.

Во первых. Рынок форекс не является случаем «дефицита данных». Напротив — это как раз случай «изобилия данных».

Во вторых. Длительный опыт исследования и применения бустинга и кроссвалидации на практике и в университетах показал, что эти методы нежелательно применять в процессе обучения, т. е. при выборе модели по внутренней ошибке. Но очень полезно на стадии оценки обученной модели, т. е. получении внешней ошибки. Поэтому для нашего случая «изобилия данных» разделение на train/valid/test при обучении идеальное решение. Есть много других тонкостей, которые нужно учитывать в процессе выбора и предподготовки данных и от которых в большой степени зависит результат моделирования, но это отдельная большая тема.

Из своего опыта длительных экспериментов с ADA могу сказать- иногда отличные результаты, иногда отвратительные = очень нестабилен.


Цитата: «Алгоритм  не требует сокращать размерности входных данных и выискивать какие признаки несут информативность, а какие нет. Напротив, чем больше входных данных имеется, тем выше вероятность правильной классификации. Неинформативные признаки автоматически отсеиваются.”

Вопрос- каким таким волшебным образом отсеиваются неинформативные признаки? Определение(оценка) важности предикторов (importance) заложена в каждом алгоритме деревьев решения, но критериев по которым определяют важность довольно много и не все дают однозначные результаты. Вы как это решаете в программе? 

Цитата: «Алгоритм не требует предварительной нормировки данных, и вообще, каких-бы то ни было предварительных манипуляций. Все данные автоматически приводятся к единичной дисперсии и нулевому математическому ожиданию.”

Единственные алгоритм который действительно не требует никакого препроцессинга это RandomForеst. Все остальные требуют различную предобработку. Вы очевидно хотели сказать, что Ваша программа процесс стандартизации (х минус среднее деленное на стандартное отклонение) выполняет за пользователя? Я не уверен, что это хорошее решение, так как существует еще по крайней мере десяток различных способов препроцессинга и нужно в каждом индивидуальном случае определять какой из них лучший.

Цитата: «Алгоритм, в отличие от нейронных сетей, не требует настраивать параметры обучения для того, чтобы получить оптимальный результат классификации.”

Неправда. Любой известный алгоритм бустинга имеет минимум два параметра которые нужно тюнинговать для получения лучшего результата.

Цитата:»Алгоритм  практически не подвержен склонности к переобучению.”

Ложное утверждение. Любой алгоритм машинного обучения подвержен этой болезни-переобучение. Уменьшение риска получить переобученную модель достигается регуляризацией. На сегодня известно и успешно применяются в том числе и в бустинговых алгоритмах различные способы регуляризации. 

Цитата:»Алгоритм  позволяет классифицировать данные на произвольное число классов”

Это не есть достижение этого алгоритма. Сегодня практически все алгоритмы машинного обучения делают это.

Цитата:»Особенность реализованного алгоритма в том, что, если в данных содержатся закономерности, – они будут найдены. Напротив, если в данных закономерности отсутствуют, то прогнозы программы будут не лучше простого подбрасывания монетки, что, собственно, логично”

Может я Вас удивлю, но все алгоритмы имеют эту особенность.

Итог. Непонятный алгоритм, который Вы предлагаете за деньги, можно реализовать прозрачно, просто и в различных вариантах на языке R и заметьте совершенно безвозмездно, т. е. бесплатно. Программа эта будет длиной 10-15 строк кода. Это первое. Второе, Неоспоримое преимущество языка R – он разрабатывается и поддерживается мировым научным сообществом (практически все университета мира) а сейчас и гигантами программного бизнеса. Майкрософт запустила облачный сервис «Azure” с Microsoft Azure Machine Learning Studio” которая позволяет в облаке произвести все стадии создания, обучения и оценки модели и в последствии получать предсказания отправляя данные в сервис к своей модели. Сервис основан полностью на языке R и имеет графический интерфейс позволяющий свести процесс к «рисованию» картинки (это я упрощаю конечно). Если раньше язык был де факто стандартом в исследовательских кругах, то сейчас он практически стал таковым в прикладной и промышленной области.

И последнее. Я не против того, чтобы Вы монетизировали свой труд воплощенный в программу. Это нормально. Я против того, чтобы Вы в целях рекламы приписывали продукту несуществующие или преувеличенные качества. Это выглядит непрофессионально.

Щательней надо. Как говорил классик.

Успехов


 
vlad1949:


Hello!

"Вообще эта область называется «Машинное обучение», искусственный интеллект это несколько другое."  - Машинное обучение - это подраздел искусственного интеллекта. Но я уверен, что вы просто забыли об этом. Бывает...

О новых типах нейронных сетей я слышал:) И, если вы заметили, в описании к моей программе сказано "классических нейронных сетей", а не всех сетей. Под классическими я подразумеваю MLP, его производные, сеть Хопфилда, вероятностная сеть и прочие. 

 "Откуда это пренебрежительно величественное мнение о многих трейдерах?" - Это мегагипервеличественное мнение сложилось на почве того, что подавляющее большинство трейдеров, которые пытаются использовать технологии слабого искусственного интеллекта, использует классические нейронные сети. 

 "Кстати нужно было бы озвучить по какому конкретно алгоритму работает Ваша программа." - адаптивный бустинг решающих деревьев одинарного уровня (пней). Там же ж написано. Так как я реализовывал его с нуля сам, не видя перед собой какой-либо образец для подражания, да и в интернете не нашлось нормального описания, я применил некоторые свои эвристики при его разработке. 

 "Для тех кто не в теме. «Бустинг»(усиление) — метод ресемплинга предложенный..." - я не знаю откуда вы это скопипастили, но, по-моему, то, что описывает это определение, это не бустинг, а бутстреп:) Бустинг - это усиление простых классификаторов. В бустинге не получают одну большую выборку N из малой m. В бустинге для каждого последующего простого классификатора  преимущественно отбираются примеры, неправильно классифицированные предыдущим. Количество примеров всегда равно первоначальному.  После этого особенно смешно читать ваше серьезное: "Для тех кто не в теме." xD

 "Во первых. Рынок форекс не является случаем «дефицита данных». Напротив — это как раз случай «изобилия данных»." - ну тут смотря с какой стороны подходить. Если вы имеете в виду форексные котировки и кучу "псевдоматематических" индикаторов от которых веет стариной и различных производных от них, то да, дефицита нет. Но так как вы углубились в другую степь, случайно спутав бустинг с бутстрепом, то ваша сентенция останется без внимания, так как я понятия не имею какого ответа вы ждете.

"Длительный опыт исследования и применения бустинга и кроссвалидации на практике и в университетах показал..." - да ладно? Boring...

"Из своего опыта длительных экспериментов с ADA могу сказать- иногда отличные результаты, иногда отвратительные = очень нестабилен. " - Ваш опыт для нас  - не аксиома, возможно, вы перепутали какие-нибудь кнопочки там или еще чего, подобно тому, как путались чуть выше. I don't know.

 "Вы как это решаете в программе? " - каждый простой классификатор сосредотачивается на том признаке, при использовании которого получается наименьшая ошибка в классификации. Если признак не информативен, то ошибка высока. Вот и вся магия. Давайте оспорьте эту логику еще одним научным бредом о том, как в университетах... Нет серьезно, напишите что-нибудь.

 "Я не уверен, что это хорошее решение" - вам не кажется, что вы слишком категоричны? Сдается мне, разработчику софта немного виднее, что нужно добавить, чтобы работало как задумано.

 "Неправда. Любой известный алгоритм бустинга имеет минимум два параметра которые нужно тюнинговать для получения лучшего результата." - какие у вас там в R нужны параметры? Я записываю...

 "Цитата:»Алгоритм  практически не подвержен склонности к переобучению.” Ложное утверждение..." - Мне так нравятся ваши высказывания:). Ну, во-первых, там сказано, что "практически". На русском языке это означает "почти". Но если в данных существует устойчивая закономерность, например, как при эксперименте с распознаванием автомобильных номеров, то да, алгоритм не переобучается. На тренировочной выборке ошибка уходит в ноль, а на тестовой выборке ошибка остается постоянной, около 1%. Вопросы?

 "Это не есть достижение этого алгоритмаСегодня практически все алгоритмы машинного обучения делают это." - вы еще скажите, что это недостаток. Это преимущество по-сравнению с бинарным классификатором. Или вы так не считаете?

 "Может я Вас удивлю, но все алгоритмы имеют эту особенность." - Читайте внимательно "если в данных содержатся закономерности, – они будут найдены." Акцент мной ставится на этом. Главная проблема в алгоритмах машинного обучения заключается в том на сколько полно будут найдены эти закономерности. В моей программе с этим все нормально. По вашей логике получается, что имея какой-нибудь MLP, людям не стоит разрабатывать другие алгоритмы, ведь многослойный персептрон  - это алгоритм машинного обучения, а вы говорите, что "все алгоритмы имеют эту особенность". 

" Непонятный алгоритм, который Вы предлагаете за деньги" - я предлагаю не алгоритм, а программу. Против языка R я ничего не имею. Но понимаете в чем соль: не все люди могут и будут разбираться в логике и синтаксисе языка программирования, разбираться в настройках алгоритмов, конвертировать какие-то файлы и цеплять к терминалу через различные костыли, чтобы использовать результат вычислений. Если кто-то умеет все это делать, то я его поздравляю. Некоторым людям нужно, чтобы это просто работало "из коробки". Можно подумать я бегаю за вами и заставляю вас приобрести наш софт. Пользуйтесь R, уверяю, от этого я не расстроюсь.

 "Я не против того, чтобы Вы монетизировали свой труд воплощенный в программу. " - Простите, ведь я забыл спросить о вашем мнении на этот счет. Но раз вы не против, то я спокоен.

"Я против того, чтобы Вы в целях рекламы приписывали продукту несуществующие или преувеличенные качества.  " - а я против того, чтобы вы писали о том, в чем не разбираетесь.

Спасибо. Я кончил. Как говорил классик.

P.S.: Я всего лишь отвечаю на агрессию. Не обижайтесь. Peace.

P.P.S.: И да, зря вы начали со мной спорить:) 

 

 

 

 

 

 

 

Причина обращения: